微机原理软件实验报告
学 院: 信息与通信工程学院 班 级: XXXXXX 姓 名: XXXXX 学 号: XXXXXXXX 班内序号: XXXXX
日 期: 2017年11月30日
目录
微 机 原 理 软 件 实 验 报告 .................................................. 错误!未定义书签。 1. 实验一 ................................................................................. 错误!未定义书签。 2. 实验二 ......................................................................................................... 7 3. 实验三 ....................................................................................................... 13 4. 实验四 ....................................................................................................... 20 5. 实验五 ....................................................................................................... 30 6. 总结及结论 ................................................................................................. 39 7. 参考文献 .................................................................................................... 39
实验一 DEBUG的使用
一、 实验目的:
1.掌握汇编程序的编辑,编译,连接和执行的全过程; 2.学习和掌握用DEBUG调试程序的方法.
二 、实验内容:
1. 用编辑软件,输入以下汇编语言源程序: DAT SEGMENT ;默认ds段 A DB 20 ;(自定) B DB 15 ;(自定) Y DB 3 DUP(0) Z DB 0,0 DAT ENDS STA SEGMENT STACK DW 50 DUP(?) STA ENDS COD SEGMENT ASSUME CS:COD,DS:DAT STAR PROC FAR PUSH DS XOR AX,AX ;AX清零 PUSH AX MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,A MOV Z,AL MOV Z+1,AL CALL SUB1 ;A*A MOV AL,B MOV Z,AL MOV Z+1,AL CALL SUB1 ;A*A+B*B MOV AL,A MOV Z,AL MOV AL,B MOV Z+1,AL CALL SUB1 ;A*A+B*B+A*B ADD WORD PTR Y,AX ;A*A+B*B+A*B +A*B --> (A+B)^2 ADC BYTE PTR[Y+2],0 RET STAR ENDP SUB1 PROC MOV AL,Z MOV AH,Z+1 MUL AH ADD WORD PTR Y,AX ADC BYTE PTR[Y+2],0 RET SUB1 ENDP COD ENDS END STAR 2.通过编译,连接形成可执行文件。
3.用DEBUG 将可执行文件调入,并进行调试。
(1)用 D 命令观察数据区在内存中的具体内容,记录单元 A 和 B 的具体地址。 (2)用 U 命令对目标代码反汇编,观察反汇编后的结果.注意发现源程序的起始 位置, 并记录这个起始地址。
(3)用 T 命令作单步跟踪调试.比较每条指令执行后的结果和原来的理解是否 一致。得出程序运行的结果:它们是写在什么单元,具体内容是什么; 并判断结果是
否正确。
(4)用 E 命令修改单元 A,B 的内容,重新执行程序,并记录结果。 (5)退出 DEBUG。
三、预习题:
1.熟悉常用的 DEBUG 命令。
2.阅读并分析程序的功能。
答:程序实现了(A+B)^2的功能。
3.若 SS=2000H,SP=FFFFH, 向堆栈中压入 4 字节数据后,如何用 D 命令显示压入
堆栈的内容?
答:使用指令“d 2000:0000”即可显示压入堆栈的内容,因为SP+1 会溢出,所以变
成0000。
四、实验过程
a.
通过masm和link命令使得程序编译链接成功。
b.
进入debug中,用u命令查看反编译结果。得出A的地址为:076A:0000,值为14H,即十进制的20D;B的地址为:076A:0001,值为0FH,即十进制的15D。Y的偏移地址为0002H,Z的偏移地址为0005H。DATA段基地址为076AH。SUB1子程序段入口地址为003F。
c.