微机原理实验三子程序设计实验
《微机原理及接口技术》实验指导书

《微机原理及接口技术》实验指导书福建工程学院计算机与信息科学系计算机系统结构教研室实验一 汇编语言程序上机过程一、实验目的1.掌握EDIT 、MASM 、LINK 等软件工具的使用。
2.掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、实验内容1.将DISP 单元中存放的一压缩BCD 码内容显示出来。
2.将BUF 单元开始的两个BCD 码相加存放到SUM 单元中,并显示结果。
3.将字节变量DISP 的内容(00H-FFH 任意值)显示出来。
三、实验准备与报告 1.了解实验操作方法,准备好实验程序和数据。
2.记录汇编、连接过程产生的错误及解决办法,设置相关的出错情况,查看汇编结果; 3.记录运行结果,更改数据再运行,记录结果。
4.实验报告主要内容:实验名称、实验目的、实验内容、<实验电路>、程序、实验结果、调试过程记录、总结。
(其它实验也按此要求书写实验报告)实验二 DEBUG 使用实验一、实验目的1.掌握DEBUG 常用命令的使用。
2.进一步了解80X86的存储器和寄存器结构。
3.进一步理解有关指令的功能与应用。
二、实验内容1.进入与退出DEBUG 。
2.用R 命令检查和修改寄存器内容并记录。
3.用D 命令显示内存单元内容并记录。
4.用E 命令修改内存单元内容并记录。
5.A 、U 、T 、P 、G 、N 、W 、L 命令使用。
程序:MOV SI ,0 MOV AX ,[SI] INC SI INC SIADD AX ,[SI] MOV BX ,AX INT 20H(1)使用A 命令输入以上程序;(2)使用U 命令查看输入的程序;(3)使用N 、W 命令将程序存盘;用N 、L 命令重新装载,用U 命令查看; (4)使用DEBUG 的D 、E 命令检查设置(DS ):0000H 起始的四个单元内容; (5)使用R 命令检查、设置有关寄存器的值;(6)分别使用T 、G 命令运行程序,注意观察有关寄存器和单元的变化。
微机原理子程序设计

实验三子程序设计1、实验目的:(1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。
(2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。
(3)子程序设计2.实验步骤:(1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。
(2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。
(扩展名为OBJ)(3)用连接程序TLINK连接目标代码文件,形成可执行文件。
(扩展名为EXE)(4)运行可执行文件。
观察执行结果,以验证其正确性。
3.实验内容:(1)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其升序后的结果。
.model small.stack 256.datacount=5array dw count dup (?)in_message db "please enter data:$"out_message db "sort result is :$".code.startupmov ah,9lea dx,in_messageint 21hmov cx,countmov si,offset arrayagain: call read ;输入count数据存入array数组中call dpcrlfmov [si],bxinc siinc siloop againmov cx,count ;排序(升序)dec cxagain2: lea si,arraymov di,cxagain1: mov ax,[si]cmp ax,[si+2]jle next1xchg ax,[si+2]xchg ax,[si]next1: add si,2loop again1mov cx,diloop again2mov ah,9lea dx,out_messageint 21hmov cx,count ;输出(升序)lea si,arrayagain3: mov bx,[si]call writecall dpcrlfinc siinc siloop again3mov ax,4c00hint 21hINCLUDE out_B_D.ASMINCLUDE in_D_B.ASMEND(2)从键盘上输入若干个十进制数(-32767<x<32767),然后排序并输出其降序后的结果。
子程序设计实验报告

实验名称:子程序设计实验日期:2023年X月X日实验地点:XX大学计算机实验室实验目的:1. 理解子程序的概念和作用。
2. 掌握子程序的设计方法和调用方式。
3. 学会使用子程序提高程序的可读性和可维护性。
实验内容:一、实验背景子程序是程序设计中常用的一种结构,它可以将一段具有独立功能的代码封装起来,方便在其他程序中调用。
使用子程序可以提高程序的可读性、可维护性和模块化程度。
二、实验环境1. 操作系统:Windows 102. 编译器:Visual Studio 20193. 编程语言:C++三、实验步骤1. 创建一个新的C++项目,命名为“子程序设计”。
2. 在项目中创建一个头文件“Subroutine.h”,用于声明子程序。
3. 在头文件中声明两个子程序:`Add` 和 `Subtract`。
4. 在头文件中定义一个全局变量 `Result`。
5. 在源文件“Subroutine.cpp”中实现头文件中声明的子程序。
6. 在主函数中调用子程序,并输出结果。
7. 编译并运行程序,观察输出结果。
四、实验代码1. 头文件“Subroutine.h”:```cpp#ifndef SUBROUTINE_H#define SUBROUTINE_Hvoid Add(int a, int b);void Subtract(int a, int b); int Result;#endif // SUBROUTINE_H```2. 源文件“Subroutine.cpp”:```cpp#include "Subroutine.h"void Add(int a, int b) {Result = a + b;}void Subtract(int a, int b) { Result = a - b;}```3. 主函数“main.cpp”:```cpp#include <iostream>#include "Subroutine.h"int main() {int a = 10;int b = 5;Add(a, b);std::cout << "Add: " << Result << std::endl;Subtract(a, b);std::cout << "Subtract: " << Result << std::endl;return 0;}```五、实验结果与分析1. 编译并运行程序,输出结果如下:```Add: 15Subtract: 5```2. 分析:(1)在实验中,我们首先在头文件中声明了两个子程序 `Add` 和 `Subtract`,它们分别用于计算两个整数的和与差。
微机原理的实验报告

一、实验目的1. 理解微机的基本组成和各部件的功能;2. 掌握微机的工作原理和指令系统;3. 熟悉汇编语言程序设计的基本方法;4. 提高动手能力和实际操作技能。
二、实验内容1. 微机系统组成实验(1)实验目的:了解微机的基本组成和各部件的功能。
(2)实验内容:观察并记录微机系统的各个部件,如CPU、内存、硬盘、主板等,并了解它们的功能。
(3)实验步骤:①观察微机系统各个部件的连接情况;②了解各个部件的功能和作用;③分析微机系统的整体结构。
2. 微机工作原理实验(1)实验目的:掌握微机的工作原理。
(2)实验内容:观察并记录微机工作过程中的各个阶段,如指令的取指、译码、执行等。
(3)实验步骤:①观察微机工作过程中的各个阶段;②了解各个阶段的功能和作用;③分析微机工作原理。
3. 指令系统实验(1)实验目的:熟悉汇编语言指令系统。
(2)实验内容:学习汇编语言的基本指令,如数据传送指令、算术运算指令、逻辑运算指令等。
(3)实验步骤:①学习汇编语言的基本指令;②编写简单的汇编语言程序,实现数据传送、算术运算、逻辑运算等功能;③调试程序,观察程序运行结果。
4. 汇编语言程序设计实验(1)实验目的:提高汇编语言程序设计能力。
(2)实验内容:编写一个汇编语言程序,实现以下功能:①计算两个数的和;②判断一个数是否为偶数;③输出程序运行结果。
(3)实验步骤:①编写汇编语言程序,实现上述功能;②调试程序,观察程序运行结果;③分析程序运行过程,确保程序正确性。
三、实验结果与分析1. 微机系统组成实验:通过观察和记录微机系统的各个部件,了解了微机的基本组成和各部件的功能。
2. 微机工作原理实验:通过观察微机工作过程中的各个阶段,掌握了微机的工作原理。
3. 指令系统实验:通过学习汇编语言的基本指令,熟悉了汇编语言指令系统。
4. 汇编语言程序设计实验:通过编写汇编语言程序,提高了汇编语言程序设计能力。
四、实验心得通过本次微机原理实验,我对微机的基本组成、工作原理和指令系统有了更深入的了解。
微机原理的实验报告

微机原理的实验报告一、实验目的本实验旨在深入理解微机原理的相关知识,并通过实践操作,掌握微机原理的实验方法与技巧。
二、实验内容1. 搭建微机实验系统:根据实验所需,搭建适当的微机实验系统,包括各种硬件设备的连接与设置。
2. 硬件接口的实验:通过连接不同的硬件接口,进行实验操作,学习硬件接口的使用方法和原理。
3. 程序设计与调试实验:使用相应的汇编语言或高级语言,编写程序并进行调试,观察程序的执行结果。
4. 中断实验:通过调用不同的中断服务例程,进行实验操作,学习中断的使用原理和应用场景。
三、实验步骤与结果1. 实验步骤:(1) 搭建微机实验系统:按照实验指导书的要求,连接各种硬件设备,确保能够正常工作。
(2) 硬件接口的实验:选择一个硬件接口,例如并行口,通过编写相应的程序,实现读取和输出数据的功能。
观察实验现象并记录。
(3) 程序设计与调试实验:根据实验要求,选择适当的编程语言,编写相应的程序,并进行调试。
观察程序的执行结果,并记录相关数据。
(4) 中断实验:选择一个中断服务例程,例如键盘中断,通过编写相应的程序,实现对键盘输入的响应。
观察实验现象并记录相关数据。
2. 实验结果:(1) 硬件接口的实验结果:通过编写程序并连接硬件接口,成功读取和输出数据,实现了相应的功能。
(2) 程序设计与调试实验结果:编写的程序能够正确执行,并得到了预期的结果。
(3) 中断实验结果:编写的程序能够响应相应的中断信号,并实现了对键盘输入的处理。
四、实验分析与讨论1. 实验分析:通过本次实验,我们深入了解了微机原理的相关知识,并通过实践操作,掌握了微机原理的实验方法和技巧。
2. 实验讨论:在实验过程中,我们遇到了一些困难和问题,例如硬件接口的连接和调试,程序的编写和调试等。
但通过彼此的合作与讨论,我们最终解决了这些问题,并成功完成了实验。
五、实验总结通过本次实验,我们对微机原理有了更深入的理解,并通过实践操作,掌握了微机原理的实验方法和技巧。
微机原理软件实验报告

实验名称:汇编语言程序设计实验日期:2023年3月10日实验地点:计算机实验室实验者:张三一、实验目的1. 熟悉汇编语言的基本语法和指令系统。
2. 掌握汇编语言程序设计的基本方法。
3. 通过实验,加深对微机原理的理解。
二、实验内容本次实验主要涉及以下内容:1. 数据传送指令的应用2. 算术运算指令的应用3. 控制转移指令的应用4. 子程序设计三、实验步骤1. 编写一个简单的程序,实现以下功能:(1)将数据0x1234存入寄存器AX;(2)将数据0x5678存入寄存器BX;(3)计算AX和BX的乘积,并将结果存入寄存器DX;(4)将乘积的高16位和低16位分别存入寄存器CX和AX。
2. 编写一个程序,实现以下功能:(1)将数据0x1A2B3C4D存入内存单元[0x1000];(2)从内存单元[0x1000]开始,读取连续4个字节的数据;3. 编写一个程序,实现以下功能:(1)定义一个子程序,实现两个整数的加法运算;(2)在主程序中调用该子程序,实现两个整数的加法运算。
四、实验结果与分析1. 数据传送指令的应用(1)将数据0x1234存入寄存器AX;MOV AX, 0x1234(2)将数据0x5678存入寄存器BX;MOV BX, 0x5678(3)计算AX和BX的乘积,并将结果存入寄存器DX;MUL BX(4)将乘积的高16位和低16位分别存入寄存器CX和AX; MOV CX, DXMOV AX, DX2. 算术运算指令的应用(1)将数据0x1A2B3C4D存入内存单元[0x1000];MOV [0x1000], 0x1A2B3C4D(2)从内存单元[0x1000]开始,读取连续4个字节的数据; MOV AX, [0x1000]MOV BX, [0x1000+2]MOV CX, [0x1000+4]MOV DX, [0x1000+6]MOV AH, 0x0EINT 0x103. 控制转移指令的应用(1)定义一个子程序,实现两个整数的加法运算;ADD procedure:ADD AX, BXRET(2)在主程序中调用该子程序,实现两个整数的加法运算;MOV AX, 0x1MOV BX, 0x2CALL ADDMOV CX, AX五、实验心得通过本次实验,我深刻理解了汇编语言的基本语法和指令系统,掌握了汇编语言程序设计的基本方法。
微机原理实验三 编程实现子程序调用
实验二编程实现循环程序**************************************************************************************一、题目内容**************************************************************************************•编程实现:• 1.主程序由键盘输入一个数(<10),用子程序1实现DATA段以这个数为首连续十个整数填充字节数组buf。
譬如显示提示:”Please input a number:”,键盘输入3,执行子程序1后buf db 3,4,5,6,7,8,9,10,11,12。
• 2.主程序实现十个数求和,调用另一子程序2实现将和逐位转为ASCII码显示:”Sum is: xx”。
•提示:和不会超过十进制3位数,所以将和除以10,逐位转换,再加上30H即分别可以得它们的ASCII码。
**************************************************************************************二、流程图****************************************************************************************************************************************************************************三、程序代码**************************************************************************************stack segment stack 'stack'dw 32 dup(0)stack ends;==========================data segmentTIP1 DB 'Plesase input a number(0<n<10) : $'BUF DB 10 DUP(?)TIP2 DB 'From n to n+10 is the result of the : $'SUM DW 0data ends;==========================STAC SEGMENT ;用于变量定义予置的堆栈空间STA DB 100 DUP(?)STAC ENDS;==========================code segment;===================MAIN proc farassume ss:stack,cs:code,ds:datapush dssub ax,axmov ax,datamov ds,ax;===========MOV DX,OFFSET TIP1 ;显示提示语MOV AH,9INT 21HXOR AX,AX ;键入并显示一个字符,把字符的ASCII码存入AL中MOV AH,1INT 21HMOV DL,0AH ;换行PUSH AXMOV AH,2INT 21HPOP AXMOV DI,OFFSET BUF ;取BUF的首址存入DI中XOR CX,CXCALL AddNum ;—1—调用子程序FUZHI实现DATA段以这个数为首连续十个整数填充字节数组bufXOR AX,AXMOV CX,0AH ;给LOOP2循环赋初值10MOV DI,OFFSET BUFAGAIN2: ADD AX,[DI] ;主程序实现求上述十个数的和,存入AX中INC DILOOP AGAIN2 ;循环10次CALL DELAY1S ;—2—调用子函数延时1SPUSH AXCALL Transf ;—3—调用另一子程序ZHUANG实现将和逐位转为ASCII码显示POP AX;MOV AH,4CH ;返回DOS,不用这个,对话框会一闪而退;INT 21H;RETmov ah, 1 ;这个的话对话框会暂停int 21hMAIN ENDP;/***************************************************************************/; 子程序名: AddNum; 功能: 实现DA TA段以输入的那个数为首连续十个整数填充字节数组buf; 入口参数:; DS:DI←待填充的数组buf的首地址; AL←输入的那个数; 出口参数: 【DI】←填充结果;/***************************************************************************/AddNum PROCPUSH CXSUB AL,30H ;将AL转为十进制MOV CX,0AH ;给LOOP循环赋初值10AGAIN1: MOV [DI],AL ;将AL存入BUF中INC DI ;DI+1,即数组BUF中的地址单元+1INC AL ;AL+1LOOP AGAIN1POP CXRET ;返回主程序AddNum ENDP;/***************************************************************************/ ; 子程序名: Transf; 功能: 实现将和逐位转为ASCII码显示; 入口参数:; DS:DI←数组buf的首地址; AX←和的十进制数; 出口参数: AX←和的ASCII码;/***************************************************************************/Transf PROCPUSHFPUSH AXPUSH BXPUSH CXPUSH DXXOR BX,BXPUSH AXXOR AH,AHCMP AX,64HJNB SANWEIPOP AXXOR AH,AHMOV BL,10 ;将除数赋值为10DIV BL ;将和AX除以10,商存入AL中,所以AL为十位数。
微机原理软件实验报告
信息与通信工程学院微机原理软件实验报告班级:姓名:学号:日期:2011年12月实验一DEBUG的使用 (1)一、实验目的 (1)二、实验内容 (1)三、预习思考 (3)四、实验过程 (4)五、实验总结 (9)实验二分支、循环程序设计 (10)一、实验目的 (10)二、实验内容 (10)三、预习思考 (10)四、实验过程 (10)(一)、流程图 (11)(二)、源代码 (11)(三)、实验分析 (11)五、实验总结 (14)实验三代码转换程序设计 (15)一、实验目的 (15)二、实验内容 (15)三、预习思考 (15)四、实验过程 (16)(一)流程图 (16)(二)模块层次图 (16)(三)源代码 (17)(四)实验分析 (21)五、实验总结 (22)实验四子程序设计 (23)一、实验目的 (23)二、实验内容 (23)三、预习思考 (23)四、实验过程 (24)(一)流程图 (24)(二)模块层次图 (25)(三)源代码 (25)(四)实验分析 (34)五、实验总结 (35)实验五中断程序设计 (37)一、实验目的 (37)二、实验内容 (37)三、预习思考 (37)四、实验过程 (38)(一)流程图 (38)(二)源代码 (39)(三)实验分析 (45)五、实验总结 (46)实验一 DEBUG 的使用一、实验目的1.掌握汇编程序的编辑、编译、连接和执行的全过程;2.学习和掌握用DEBUG调试程序的方法。
二、实验内容1.用编辑软件,输入以下汇编语言源程序:DAT SEGMENTA DB 20B DB 15Y DB 3 DUP(0)Z DB 0,0DAT ENDSSTA SEGMENT STACKDW 50 DUP(?)STA ENDSCOD SEGMENTASSUME CS:COD,DS:DATSTAR PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATMOV DS,AXMOV AX,STAMOV SS,AXMOV AL,AMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,BMOV Z,ALMOV Z+1,ALCALL SUB1MOV AL,AMOV Z,ALMOV AL,BMOV Z+1,ALCALL SUB1ADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSTAR ENDPSUB1 PROCMOV AL,ZMOV AH,Z+1MUL AHADD WORD PTR Y,AXADC BYTE PTR[Y+2],0RETSUB1 ENDPCOD ENDSEND STAR2.通过编译,连接形成可执行文件。
微机实验报告
微机实验报告实验四:子程序设计一.实验目的1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
二.实验内容程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:按1键完成字符串小写字母变大写字母用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。
用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)1、接收用户输入的可显示字符串,以回车结束。
程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。
程序将其中最大的数显示出来。
用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。
用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三.程序与流程图主程序的简略流程子程序一的简略流程图子程序二的简略流程图子程序三的简略流程图子程序4,显示时间流程图四、源程序代码DATA SEGMENTORG 9999HMENU DB 0DH,0AH,'Programed by Deng Tengfei Class Electronic Material Grade 09',0DH,0AH, ;菜单DB 'Please input 1~5 to choose service',0DH,0AH,DB '1: Convert a small letter to a big letter' ,0DH,0AH,DB '2: Seek the bigest number',0DH,0AH,DB '3: Put the character string in order' ,0DH,0AH,DB '4: Set time and check time',0DH,0AH,DB '5: End the program$'MEG0 DB ' Please choose function$' ;提示信息MEG0~MEG8MEG1 DB 'You have choose the function 1.',0DH,0AH,'Please input the character string you want to convert:$'MEG2 DB 'You have choose the function 2.',0DH,0AH,'Please input the character string:$'MEG3 DB 'You have choose the function 3.',0DH,0AH,'Please input the character string you want to sort$'MEG4 DB 'You have choose the function 4.',0DH,0AH,'Please input the time you want to set in format like:xx:xx:xx$'MEG5 DB 'The program is end$'MEG6 DB 'Sorry.you have chosen a undefined function .Please input a correct function number$' MEG7 DB 'Fail to set time$'MEG8 DB 'Press any key to do again or press the ESC key to return to the main menu$ 'FLAG DB -1 ;冒泡排序中使用的标志DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC NEAR ;主程序MOV AX,DATAMOV DS,AXCIN: LEA DX,MENU ;输出提示信息MOV AH,09HINT 21HCALL ENT ;输出回车换行LEA DX,MEG0MOV AH,09HINT 21HCALL ENTMOV AH,01HINT 21HCMP AL,30H ;判断功能号JLE EORCMP AL,31HJE F1CMP AL,32HJE F2CMP AL,33HJE F3CMP AL,34HJE F4CMP AL,35HJE F5EOR: CALL ENTLEA DX,MEG6 ;输出出错信息MOV AH,09HINT 21HJMP CINF1: CALL ENT ;功能1LEA DX,MEG1MOV AH,09HINT 21HCALL ENTCALL FUN1 ;调用子程序1MOV AH,01HINT 21HCMP AL,1BHJNE F1JMP CINF2: CALL ENT ;功能2LEA DX,MEG2MOV AH,09HINT 21HCALL ENTCALL FUN2 ;调用子程序2MOV AH,01HINT 21HCMP AL,1BHJNE F2JMP CINF3: CALL ENT ;功能3LEA DX,MEG3MOV AH,09HINT 21HCALL ENTCALL FUN3 ;调用子程序3MOV AH,01HINT 21HCMP AL,1BHJNE F3JMP CINF4: CALL ENT ;功能4LEA DX,MEG4MOV AH,09HINT 21HCALL ENTCALL FUN4 ;调用子程序4MOV AH,01HINT 21HCMP AL,1BHJNE F4JMP CINF5: MOV AH,4CH ;功能5,终止程序INT 21HFUN1 PROC NEAR ;子程序1PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AH ;字符串输入INT 21HCALL ENTMOV SI,DXINC SIMOV CL,[SI] ;设定循环次数MOV CH,0JIK: INC SIMOV AL,[SI]CMP AL,0DH ;判断字符ASCII码JE KLCMP AL,61HJB JKCMP AL,7AHJA JKSUB AL,20H ;小写转大写JK: MOV DL,AL ;输出字符MOV AH,02HINT 21HLOOP JIKCALL ENTLEA DX,MEG8MOV AH,09HINT 21HKL: POP SIPOP DXPOP CXPOP AXRETFUN1 ENDPFUN2 PROC NEAR ;子程序2PUSH AXPUSH CXPUSH DXPUSH SIMOV AH,0AHINT 21HCALL ENTMOV SI,DXINC SIMOV CL,[SI]MOV CH,0INC SIMOV AL,[SI]FH: INC SI ;循环比较CMP AL,[SI]JA FGMOV AL,[SI]FG: LOOP FHMOV DL,ALMOV AH,02HINT 21HCALL ENTLEA DX,MEG8MOV AH,09HINT 21HPOP SIPOP DXPOP CXPOP AXRETFUN2 ENDPFUN3 PROC NEAR ;子程序3 PUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIMOV AH,0AHINT 21HCALL ENTMOV SI,DXINC SIMOV BL,[SI]MOV BH,0INC SIMOV DI,SILP1: CMP FLAG,0 ;根据标志判断JE LP3DEC BX ;检查循环次数CMP BX,0JE LP3MOV CX,BXMOV SI,DIMOV FLAG,0LP2: MOV AL,[SI] ;前后比较CMP AL,[SI+1]JLE NEXTXCHG AL,[SI+1]MOV [SI],ALMOV FLAG,0FFHNEXT:INC SILOOP LP2 ;内循环继续JMP LP1 ;退出内循环LP3: DEC DI ;重新设定循环次数MOV CL,[DI]MOV CH,0LP4: INC DI ;循环输出字符MOV DL,[DI]MOV AH,02HINT 21HLOOP LP4CALL ENTLEA DX,MEG8MOV AH,09HINT 21HPOP DIPOP SIPOP DXPOP CXPOP BXPOP AXRETFUN3 ENDPFUN4 PROC NEAR ;子程序4PUSH AXPUSH BXPUSH CXPUSH DXCALL CROT ;调用子程序CROTMOV CH,AL ;装入入口参数MOV AH,01HINT 21HCALL CROTMOV CL,ALMOV AH,01HINT 21HCALL CROTMOV DH,ALMOV DL,0CALL ENTMOV AH,2DH ;调DOS中断置时间INT 21HCMP AL,0FFHJE FALPRT: PUSH DX ;输出时间MOV AL,CHMOV AH,0MOV BL,0AHDIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV DL,3AHINT 21HMOV AL,CLMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV DL,3AHINT 21HPOP DXMOV AL,DHMOV AH,0DIV BLADD AL,30HADD AH,30HMOV DL,ALMOV DH,AHMOV AH,02HINT 21HMOV DL,DHINT 21HMOV AH,2CH ;调DOS中断取时间INT 21HMOV AL,0AH ;写入OCW3OUT 20H,ALNOP ;延时NOPNOPNOPNOPNOPNOPNOPNOPNOPNOPNOPIN AL,20H ;读取IRRAND AL,02HJNE MKCALL COV ;调子程序COVJMP PRTFAL: LEA DX,MEG7MOV AH,09HINT 21HMK: CALL ENTMOV AH,01HINT 21HLEA DX,MEG8MOV AH,09HINT 21HPOP DXPOP CXPOP BXPOP AXRETFUN4 ENDPCROT PROC NEAR ;子程序CROT,完成ASCII码转换成两位十进制数PUSH BXPUSH CXPUSH DXMOV BL,0 ;初始化BL和BHMOV BH,0AHMOV DX,02H ;设循环次数GET: MOV AH,01HINT 21HSUB AL,30HCMP AL,0JB FALCMP AL,09HJA FALXCHG AL,BLMUL BHADD AL,BLXCHG AL,BLDEC DXCMP DX,0JNE GETMOV AL,BLPOP DXPOP CXPOP BXRETCROT ENDPCOV PROC ;格式控制,使光标回到上个制表位PUSH AXPUSH CXPUSH DXMOV CX,08HMOV AH,02HMOV DL,08HREC: INT 21HLOOP RECPOP DXPOP CXPOP AXRETCOV ENDPENT PROC ;格式控制,输出回车换行MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HRETENT ENDPMAIN ENDPCODE ENDSEND MAI五、程序调试及运行结果:主菜单1、功能一(小写字母转大写字母):2、功能二(找出ASCII码最大的字符):3、功能三(按ASCII码把字符从大到小排列):4、功能四(显示跳动的时间):5、功能五(退出程序):6、错误的输入:六、实验心得子程序可以作为一个相对独立的部分单独设计,但要注意在进入子程序和退出子程序时保护现场和恢复现场。
汇编语言程序设计实验报告三(子程序设计实验)
汇编语言程序设计实验报告三(子程序设计实验)汇编语言程序设计实验报告三(子程序设计实验)实验目的掌握主程序与子程序之间的调用关系及其调用方法。
掌握子程序调用过程中近程调用与远程调用的区别。
熟练掌握码型变换的程序。
实验内容从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制数,并在屏幕上显示。
要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。
数据可循环输入,遇‘00’结束。
实验准备预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。
熟悉键盘输入和字符显示的程序段的编制。
实验步骤编辑、汇编源程序,生成可执行文件。
执行程序,检查输入、输出结果,看是否正确。
如不正确,用DEBUG检查,修改源程序,再汇编、运行,直到程序正确为止。
用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆栈的变化情况。
实验报告要求分析近程调用和远程调用的主要区别。
用DEBUG命令观察执行过程有何不同。
分析实验结果及所遇到的问题的解决方法。
程序流程图开始TRAN程序标准序开始读入十进制数据放AX中AXAXAND0F0FH是00?YBLALN调用转换子程序结束AL左移3位回车、换行BL左移1位于ALAL+BL主程序流程图ALAL+AHRET转换子程序TRAN流程图程序清单STASEGMENTSTACK’STACK’DB100DUP(0)STAENDS GSAGSEGMENTPARA‘CODE’ASSUMECS:CSAG MAINPROCFARSTRAT:PUSHDSSUBAX,AXPUSHAXREV:MOVAH,1INT21HMOVBL,ALINT21HMOVAH,ALMOVAL,BLCMPAX,3030H JEENDTRAN CALLNEARPTRTRAN CALLFARPTRCON MOVAL,0DH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP JMPREV ENDTRAN:RET MAINENDP TRANPROCNEAR ANDAX,0F0FHMOVBL,ALMOVBL,ALMOVCL,3SHLAL,CLMOVCL,1SHLBL,CLADDAL,BLADDAL,AHRETTRANENDPCSAGENDS CSBGSEGMENTPARA’CODE’ASSUMECS:CSBG CONPROCFARPUSHAXMOVCL,4 SHRAL,CL ADDAL,30H CMPAL,39H JBECON2 ADDAL,7CON2:PUSHAX MOVAL,0DH CALLFARPTRDISP MOVAL,OAH CALLFARPTRDISP POPAX CALLFARPTRDISP POPAX ANDAL,0FHADDAL,30H CMPAL,39H JBECON1ADDAL,7CON1:CALLFARPTRDISP RETCONEDNP DISPPROCFAR PUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPENDPCSBGENDS ENDSTART。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三 子程序设计实验
一、实验目的
1.学习子程序的定义和调用方法。
2.掌握子程序的程序设计、编制及调用。
二、实验设备
TDN86/88教学实验系统一台
三、实验内容及步骤
1.求无符号字节序列中的最大值和最小值
设有一字节序列,其存储首址为3000H ,字节数为08H 。
利用子程序的方法编程求出该序列中的最大值和最小值。
实验程序及流程如下:
主程序
STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS CODE SEGMENT
ASSUME CS:CODE
START: MOV SI,3000H
MOV CX,0008H CALL branch
A1: JMP A1 branch: JCXZ A4
PUSH SI PUSH CX PUSH BX
子程序
实验步骤
(1)输入源程序,进行编译、链接和加载。
(2)在调试区键入E0000:3000↙,输入8个字节的数据:D9、07、8B、C5、EB、04、9D、F9。
(3)运行程序,查看结果,在调试区键入R AX↙,显示结果应为AX=F9 04,AH中为最大值,AL中为最小值。
2.数组求和
设有一字节序列(存储地址和字节数可自定义),编写程序,求出该序列的和,求和工MOV BH,[SI]
MOV BL,BH
A1: LODSB
CMP AL,BH
JBE A2
MOV BH,AL
JMP A3
A2: CMP AL,BL
JAE A3
MOV BL,AL
A3: LOOP A1
MOV AX,BX
POP BX
POP CX
POP SI
A4: RET
CODE ENDS
END START
作由子程序来实现。
程序:
STACK1 SEGMENT STACK DW 64 DUP(?)
STACK1 ENDS
CODE SEGMENT ASSUME CS:CODE START: MOV SI,3000H MOV CX,0008H
XOR AX,AX
CALL branch
A5: JMP A5
branch: JCXZ A4
PUSH SI
PUSH CX
A1:
ADD AL,[SI]
INC SI
A3: LOOP A1
POP CX
POP SI
A4: RET
CODE
ENDS
END START
8个01,总和为08。