当前位置:文档之家› 东华大学微机实验报告答案(软件)

东华大学微机实验报告答案(软件)

目录实验一DEBUG的启动及其基本命令的使用实验二内存操作数及寻址方法实验三汇编语言程序的调试与运行实验四查表程序设计实验五系统功能调用实验六分支程序设计实验七循环程序设计实验八子程序设计实验九综合程序设计实验心得体会参考文献实验一 DEBUG的启动及其基本命令的使用源程序:(指导书中给出)DA TA SEGMENTSTRING1 DB 'Move the cursor backward'STRING2 DB 'Move the cursor backward'MESS1 DB 'Match.',13,10,'$'MESS2 DB 'No Match.',13,10,'$'DA TA ENDSSTACK SEGMENT STACKDB 40 DUP (?)STACK ENDSPROGNAM SEGMENTASSUME CS:PROGNAM,DS:DA TA,ES:DA TA,SS:STACKMAIN PROC FARSTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,STACKMOV SS,AXLEA SI,STRING1LEA DI,STRING2CLDMOV CX,25REPZ CMPSBJZ MA TCHLEA DX,MESS2JMP SHORT DISPMATCH: LEA DX,MESS1DISP: MOV AH,09hINT 21HRETMAIN ENDPPROGNAM ENDSEND START运行结果:用DEBUG调试将输出字符串改为‘No Match’用E指令修改“backward”为“forward”再次用d命令查看修改结果。

用g命令运行程序实验二内存操作数及寻址方法1、(1)程序说明:设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用字处理程序编辑程序。

(2)调试说明:对SP的地址分配不到2000,计算机自动分配为0000,此时我就人为的把堆栈的首地址定义为2000。

(3)写出源程序清单和执行结果:源程序:STACK SEGMENT STACKDW 100 DUP(0)STACK ENDSCODE SEGMENTASSUME SS:STACK,CS:CODESTART:MOV AX,3000HMOV BX,5000HMOV SP,2000HPUSH AX ;将AX中的内容压栈MOV AX,BX ;BX中的内容给AXPOP BXMOV AH,4CHINT 21HCODE ENDSEND START用debug调试结果:2、程序说明:用masm和link 对以下程序进行汇编和连接,调试程序在DEBUG 调试程序状态下进行。

用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX中的内容是什么。

源程序:DA TA SEGMENTORG 0300HA DB 12H,23H,34H,45H,56H,67H,78H,89H,9AHDA TA ENDSPROGNAM SEGMENTASSUME CS:PROGNAM,DS:DA TASTART: MOV AX,DATAMOV DS,AXMOV BX,0300HMOV AX,0300H ;立即数寻址MOV AX,[0300H] ;存储器寻址方式中的直接寻址方式MOV AX,[BX] ;寄存器间接寻址MOV SI,2MOV AX,0001[BX] ;基址寻址MOV AX,[BX][SI] ;基址加变址MOV AX,0001[BX][SI] ;带偏移量的基址加变址MOV AH,4CHINT 21HPROGNAM ENDSEND START用debug调试结果:实验三算术运算指令1、程序说明:编写三个完整的汇编语言源程序,完成以下计算。

其中X、Y、Z、R、W均为存放16位带符号数单元的地址。

(1)Z←W+(Z-X)(2)Z←W-(X+6)-(R+9)(3)Z←(W*X)/(Y+6),R←余数2、调试说明:当编译完成后,计算机未能生成.OBJ的文件,经检查错误发生在ADD使用上,我把两个寄存器操作数同时用在ADD语句里,结果出错了。

把ADD语句稍作写该后,程序运行正确。

3、写出源程序清单和执行结果本实验我们只做前两个,即:(1)Z←W+(Z-X);(2)Z←W-(X+6)-(R+9)源程序:(1) Z←W+(Z-X)DA TA SEGMENTX DD 0001HZ DD 0003HW DD 0005HDA TA ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV AX,XMOV BX,ZSUB BX,AXMOV AX,WADD BX,AXMOV Z,BXMOV AH,4CHINT 21HCODE ENDSEND START用debug调试结果:源程序:(2)Z←W-(X+6)-(R+9)DA TA SEGMENTX DW 0006HR DW 003AHW DW 0110HZ DW ?DA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,XADD AX,6MOV BX,RADD BX,9MOV CX,WSBB CX,AXSBB CX,BXMOV Z,CXMOV AH,4CHINT 21H CODE ENDSEND START 用debug调试结果:实验四查表程序设计1、程序说明:用查表的方法将一位十六进制数转换成与它相应的ASCII码,并将结果存放到ASCI单元中。

2、调试说明:开始生成.OBJ文件时,调试不成功,以为是程序编译有误,后经再三检查都未发现错误,这时只好从头做检查,结果发现了错误:从本实验有的提示语段中拷贝过来的语句书写有误,即符号的书写为中文书写,以至于整个程序未能通过编译。

把中文书写修改为英文书写后,编译成功。

3、源程序清单和执行结果:源程序:DA TA SEGMENTTABLE DB 30H,31H,32H,33H,34H,35H,36H,37HDB 38H,39H,41H,42H,43H,44H,45H,46HHEX DB 08HASCI DB ?DA TA ENDSCODE SEGMENTASSUME DS:DA TA,CS:CODESTART: MOV AX,DATAMOV DS,AXMOV BX,OFFSET TABLEMOV AL,HEX ;查找对象的下标存在AL中XLATMOV ASCI,ALMOV AH,4CHINT 21HCODE ENDSEND START用debug调试结果:实验五系统功能调用1、程序说明:试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

2、调试说明:在DEBUG显示字符窜时,曾显示乱码,未能按预期显示,经检查发现在编译字符窜时出现错误,因为调用21H中断输出一串字符要求用'$'结尾,我没用上‘$’。

还有,键盘输入字符是被存放在AX内,当要多次使用AX 时应该把输入内容另存一地址3、源程序清单和执行结果:源程序:DA TA SEGMENTDB ?DA TA ENDSSTACK SEGMENT STACKDB 5 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DA TA, SS:STACK,CS:CODESTART: MOV AX,DATAMOV DS,AXMOV AH,01H ;从输入端读取字符INT 21HSUB AL,20H ;小写转换成大写MOV DL,ALMOV AH,02H ;输出字符到终端INT 21HMOV AH,4CHINT 21HCODE ENDSEND START运行结果:实验六分支程序设计1、实验说明:假设有一组数据:5,-4,0,3,100,-51,请编一程序,判断:每个数大于0,等于0,还是小于0;并输出其判断结果。

即:1 当x>0y= 0 当x=0-1 当x<02、调试说明:在最初的程序中,我使用了MOV BX,XX等语句,后来发现像这样的语句在实际使用中有些累赘,于是我便做了修改,简化了汇编语言。

其次,在调试中,发现符号无法显示的问题,于是采用两次显示符号的方法,较理想的解决了负号问题。

34、源程序清单和执行结果:源程序:DA TA SEGMENTXX DB 05H,0FCH,00H,03H,64H,0CDHY1 DB 'Y=1',0DH,0AH,'$'Y2 DB 'Y=0',0DH,0AH,'$'Y3 DB 'Y=-1',0DH,0AH,'$'DA TA ENDSSTACK SEGMENT STACKDB 10 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DA TA,SS:STACK,CS:CODE START: MOV AX,DATAMOV DS,AXLEA SI,XXMOV AX,0MOV CX,6L1: MOV AL,[SI]CMP AL,0 ;与0比较JG BIGERJE EQUALMOV DX,OFFSET Y3MOV AH,09HINT 21HJMP OUTPUTBIGER: MOV DX,OFFSET Y1MOV AH,09HINT 21HJMP OUTPUTEQUAL: MOV DX,OFFSET Y2MOV AH,09HINT 21HOUTPUT:INC SILOOP L1MOV AH,4CHINT 21HCODE ENDSEND START运行结果:思考题:程序中的原始数据是以怎样的形式存放在数据区中的?请用DEBUG调试程序观察并分析。

以补码形式存放实验七循环程序设计实验内容:1. 编制程序计算S=1+2•3+3•4+4•5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。

其程序的流程图如图7. 1所示。

2. 将从3000H内存单元开始的100个字节存储单元全部清0。

本实验要求在DEBUG调试状态下进行,包括汇编程序、运行程序、检查结果。

源程序:(1)编制程序计算S=1+2•3+3•4+4•5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。

相关主题