微机原理软件实验报告课件.docVIP

  • 4
  • 0
  • 约1.64万字
  • 约 50页
  • 2019-05-28 发布于湖北
  • 举报
微机原理软件实验报告 学院: _信息与通信工程学院 _ 班 级: 姓 名: 学 号: 微机原理软件实验· 报告 实验一 DEBUG 的使用 一、实验目的 1. 掌握汇编程序的编辑、编译、连接和执行的全过程; 2. 学习和掌握用 DEBUG 调试程序的方法。 二、实验内容 1. 用编辑软件,输入以下汇编语言源程序: DAT SEGMENT 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:DA T STAR PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DA T MOV DS,AX MOV AX,STA MOV SS,AX MOV AL,A MOV Z,AL MOV Z+1,AL 第 1 页 微机原理软件实验· 报告 CALL SUB1 MOV AL,B MOV Z,AL MOV Z+1,AL CALL SUB1 MOV AL,A MOV Z,AL MOV AL,B MOV Z+1,AL CALL SUB1 ADD WORD PTR Y ,AX 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. 用 DEBUG 将可执行文件调入,并进行调试。 1) 用 D 命令观察数据区在内存中的具体内容,记录单元 A 和 B 的具体 地址。 2) 用 U 命令对目标代码反汇编,观察反汇编后的结果。注意发现源程序 的起始位置,并记录这个起始地址。 3) 用 T 命令作单步跟踪调试。比较每条指令执行后的结果和原来的理解 是否一致,得出程序运行的结果:它们是写在什么单元 ,具体内容是什 第 2 页 微机原理软件实验· 报告 么;并判断结果是否正确。在子程序 SUB1 的入口处设一断点,用 G 命令执行程序。在断点处观察堆栈的内容,比较堆栈的内容和程序返 回地址是否一致。 4) 用 E 命令修改单元 A,B 的内容,重新执行程序,并记录结果。 5) 用 M 命令和 A 命令对程序进行修改:将主程序中最后两条指令 (ADD 和 ADC) 修改为一条 CALL SUB1 指令,重新执行程序。 6) 退出 DEBUG。 3. 重新使用编辑软件,把源程序最后一句中的 STAR 去掉。再次生成可 执行文件,并用 DEBUG 调入内存。当使用 U 命令时,显示的结果与 前一次(未加 STAR) 的结果有何不同? 三、预习思考 1. 熟悉常用的 DEBUG 命令。 答:常用的 DEBUG 命令如下图表所示。 2. 阅读并分析程序的功能。 答:程序完成的功能是计算两个数的完全平方和,即计算 2 2 2 a b ab 。 第 3 页 微机原理软件实验· 报告 3. 若 SS=2000H,SP=FFFFH,向堆栈中压入 4 字节数据后,如何用 D 命 令显示压入堆栈的内? 答:使用的命令是: -D 2000:FFFB,即使用段基址加偏移量查看。 四、实验过程 以下由实验截图展现具体的实验过程,截图进行了详细标注,便于阅读。 上图为编译、链接形成可执行文件的过程。 第 4 页 微机原理软件实验· 报告 上图展现了进行反编译然后使用 D 命令查看数据段中 A、B 值的过程。 上图使用 E 命令对数据段数据 A 和 B 进行了修改,修改后用 D 命令进行 了查看。 第 5 页 微机原理软件实验· 报告 上图演示了如何设置断点。在 SUB1 出设置一断点,可以看到程序执行到 CALL 0003F 时中断,各寄存器的值均有显示。 下图为调用子程序 SUB1,然后子程序结束,返回主程序前寄存器的值。 可以看到,压入堆栈的 IP 值弹出,CS:IP已经指向了下一条语句的地址。 下图中操作实现的功能是将 ADD 和 ADC 两条语句替换为 CALL 语句, 通过 A 命令可以直接修改程序指令,通过插入 NOP 指令使 CPU 空闲。也可 第 6 页 微机原理软件实验· 报告 以通过 M 命令拷贝 CALL SUB1 的机器代码到目的地址,但操作容易出错, 原因是源地址和目标地址指令长度不一致。 当重新使用编辑软件,把源程序最后一句中的 STAR 去掉。再次生成可执 行文件,再次 DEBUG 时。当使用 U 命令时,结果如下图所示。可以看到, 没有 END STAR 语句,编译器将不知道代码段的入口地址是多少

文档评论(0)

1亿VIP精品文档

相关文档