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,但我不知道暂存这些的原因)?这个问题我依然保留。