实验日期 11.18
学院:计软院 专业: 计科 年级: 2017级
班次:6班 姓名:庄桢立 学号:20171308231
一、实验目的
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 中调试,观察实验结果与理论分析是否一致,如不一致,尝试 发现问题所在,并分析原因。
四、实验结论
实验任务(1):
① 截图记录:使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入的操 作
② 截图记录:使用 a 命令输入的 p74 指令
③ 截图记录:每一行指令单步调试(如单步调试步骤多,可分屏截图,但不要有遗漏)
④ P74 中指令执行后各个寄存器填空结果,以在文档中手工标注或手机拍照截图方式 复制在文档中。 对于③单步调试的观察,与理论上分析的结果进行比较,检验是否一致。 如不一致,分析查找原因。
修改前先用-d命令查看 0021:0~0021:f 的数据,再用e命令修改数据,修改后再用d命令查看是否正确写入

使用-a命令输入指令

用-t命令执行每一条语句



mov ax,[0] ;ax=3130
add ax,[2] ;ax= 6462
mov bx,[4] ;bx= 3534
add bx,[6] ;bx= 6C6A
push ax ;sp= 00FE ;修改的内存单元的地址是2200:FE内容为6462
push bx ;sp= 00FC ;修改的内存单元的地址是2200:FC内容为6A6C
pop ax ;sp= 00FE ;ax=6C6A
pop bx ;sp= 0100 ;bx=6462
push [4] ;sp= 00FE ;修改的内存单元的地址是2200:FE内容为3435
push [6] ;sp= 00FC ;修改的内存单元的地址是2200:FC内容为3736
以上命令将内存单元2200:FE和内存单元2200:FC的值进行了交换
通过观察,指令mov sp 0100似乎没有执行, 实际上,在T命令执行mov ss,ax时,下一条指令mov sp,0100 也紧接着被执行。
实验任务(2):
① 截图记录图 3.19 中使用 a命令输入的 7 行指令,使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分
② 单步调试每一行汇编指令的截图。且每一条指令单步调试后,都使用 d 命令查看 2000:0~2000:f 的值。观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单 元值的变化,并思考原因。


前三段指令的通过修改段寄存器SS和寄存器SP的值来修改栈顶的段地址和偏移地址 。
命令mov sp,0010修改了偏移地址,使得任意时刻SS:SP都指向栈顶元素。
五、总结与体会
通过本次实验
1)对栈的概念以及栈元素的存放和修改有了更多的了解
2)学到了“Debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行”
来源:https://www.cnblogs.com/zzl-2239105408/p/9978856.html