一、实验目的
1. 熟练掌握使用debug工具编写和调试汇编命令的方法 2. 理解并掌握内存中多字节数据的存放 3. 理解并掌握「栈」内存空间的特性和使用 4. 理解并掌握8086汇编指令mov, add, sub, push, pop的用法
二、实验准备
1. 复习第 3 章「栈」的知识:栈的特性、寄存器 SS 和 SP、指令 push 和 pop 2. 完成教材 3.6~3.9 节内的问题 3.6~3.12,检测点 3.1~3.2 3. 结合教材实验1 (P35)及公邮文件中心→实验下的 “实验1辅助文档.pdf”复习debug 工具用法。
三、实验内容
1. 教材实验2(P71) (1)练习「1.预备知识:Debug 的使用」 (2)在练习基础上,完成「2. 实验任务」 补充: 为了便于验证实验结果,对「2. 实验任务」中的(1)做如下两点调整: ① 在使用 a 命令输入指令调试前,使用 e 命令将内存单元 0021:0 ~0021:7 连续 8 个字节数据修改为 30H, 31H, 32H, 33H,34H,35H,36H,37H ② 将 P74 实验任务(1)中第 1行的 mov ax, ffff → 改为 mov ax, 0021 实验前,请理论上分析指令执行后各个填空处的值,并记录下来。 实验时,通过在 debug 中调试,观察实验结果与理论分析是否一致,如不一致,尝试 发现问题所在,并分析原因。
四、实验结论
任务一
使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。
首先用e 命令修改数据,并用a命令写入指令。
然后使用t 命令执行上述指令
逐条执行完成,得到结果。
ax=3130
ax=6462
bx=3534
bx=6C6A
sp=00FE 修改的内存单元的地址是0100 内存为6462
sp=00FC 修改的内存单元的地址是00FE 内存为6C6A
sp=00FE ax=6C6A
sp=00FC bx=6462
sp=00FE 修改的内存单元的地址是 0100 内存为3534
sp=00FC 修改的内存单元的地址是 00FE 内存为3736
任务二
仔细观察图中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生变化改变?
在使用t 命令进行调试时,会产生中断。为了保护现场,cpu则会将标志寄存器进栈,再把当前CS的值进栈,最后将IP的值进栈。
实验结论
通过实验了解栈的工作原理,明白了栈的使用。