1、使用Debug将程序段写入内存,逐条执行。
为了便于验证实验结果,在使用 a 命令输入指令调试前,先使用 e 命令将内存单元 0021:0 ~0021:7 连续 8个字节数据修改为 :
30H, 31H, 32H, 33H,34H,35H,36H,37H
操作如下图:
接着使用a命令输入书上74页试验任务一的程序段:
使用t命令逐条执行:
(注意上图圈出的两条语句中间本应还有一句(mov sp,0100),可因中断机制的存在debug的T命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行(无论下一条语句是不是执行对sp的改写))
跟踪执行过程中几个寄存器的内容,如下图所示:
手写内容与debug单步调试中并未发现不同之处。
2、观察书75页中的实验过程,分析2000:0~2000:f中内容发生改变的原因。
首先使用 a 命令输入书中的 7 行指令,再使用 e 命令修改 2000:0~2000:f的值,并在修改后对其进行查看。
操作如下图:
前三行指令是给指向栈顶元素的SS:SP赋值,SS=2000H,SP=0010H。
初始时栈顶和栈底都被e命令赋值为0。
接着单步调试每一行汇编指令。且每一条指令单步调试后,都使用 d 命令查看2000:0~2000:f 的值。
观察每一条指令执行后相关寄存器值的变化,及 2000:0~2000:f 单元值的变化。
操作如下图:
我眼睛都要看瞎了只发现了2000:0010存放的是IP的地址,2000:0012存放的是cs的地址。
别的就不知道了.......
而且什么猜想也没有.........
求大佬指教.......
小总结:
通过本次实验我对mov、sub、add、push、pop等操作更加熟练了,同时也能够自己算出各时刻个寄存器的值,有点小小的成就感。
各个字母数字在我眼中都有了不同的意思,不再是乱码般的存在了。