1.使用debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。

写入指令

 

 逐步运行:

可由上图看出:

mov ax,[0]   ;ax=C0EA

add ax,[2]    ;ax=C0FC

mov bx,[4]   ;bx=30F0

add bx,[6]    ;bx=6021

push ax       ;sp=00FC;修改的内存单元地址是IP内容为011D

push bx       ;sp=00FC;修改的内存单元地址是IP内容为011E

pop ax         ;sp=00FE;ax=6021

pop bx         ;sp=0100;bx=C0FC

push [4]       ;sp=00FE;修改的内存单元地址是IP内容为0124

push [6]       ;sp=00FC;修改的内存单元地址是IP内容为0128

(2)仔细观察图中的实验过程,然后分析:为什么2000:0~2000:f中的内容会发生改变?

输入指令

修改2000:0~2000:f的值

查看该地址的值,确保已修改

使用t命令逐步运行,运行两个指令后再查看2000:0~2000:f的值

发现该地址上的数据改变了,不过我观察到我的值和课本上给出的例子的值不同。所以我觉得这个值的改变并不是人为设定的,

而是计算机自动改变的值,因为运行的指令和栈有关,所以我怀疑这个值可能是由对栈的变动产生。

上网查询后,网上对于这个问题的解释是,t命令是中断,为了保留现场,机器自动压栈SS,IP,CS;为单步中断;而且看到这十个

数值,发现正好是SS,IP,CS的赋值!

但是其具体原理,我仍然不太明白,为何会在这个地址产生这几个数值呢?产生这几个数值的意义是什么(目前我猜测是为了暂存

SS,IP,CS,但我不知道暂存这些的原因)?这个问题我依然保留。