实验2
四.实验结论
(2).1






Mov ax,[0] ;ax=3130
Add ax,[2] ;ax=6462

Mov bx,[4] ;bx=3534
Add bx,[6] ;bx=6C6A

Push ax ;sp=00FE;修改的内存单元地址是2100:00FE,内容为 6462
Push bx ; sp=00FC;修改的内存单元地址是2100:00FC ,内容为 6C6A
Pop ax ;sp= 00FE ; ax=6C6A
Pop bx ;sp=0100 ;bx=6462

Push [4] ; sp=00FE;修改的内存单元地址是2100:00FE,内容为3534
Push [6] ; sp=00FC;修改的内存单元地址是2100:00FC,内容为3736
实验结果与预判一致
(2).2



根据观察 mov sp,10 没有在单步执行中出现,但在下一步中 sp 的值已经从FFEE 变为0010了,判断为跟随 mov ss,ax一起执行了
在书12章 内中断中找到了具体解释
12.12 响应中断的特殊情况
在执行完向ss寄存器传送数据的指令后,即便是发生中断cpu也不会响应。因为ss:sp联合指向栈顶,对他们的设置应该连续完成。如果设置完ss以后cpu响应中断,要在栈中压入标志寄存器,cs和ip的值。(而此后sp会被改变)此时的栈顶是不正确的。所以cpu在执行设置完ss以后不响应中断。
2000:0~2000:f 发生变化的原因是
因为栈段地址是 2000:0010
当进行压栈操作时cpu 将sp-2 然后修改内存单元值
但在进行压栈操作前,修改段地址和偏移地址时 内存2000:7~2000:F 发生变化的原因还不知道
五.总结与体会
在本次实验中,通过单步执行,观察寄存器和内存单元值的变化,掌握了汇编语言中栈的特性,也熟悉了栈的操作,通过查找资料,提前翻书,了解了一部分12章中内中断的内容,同时也留下了一些问题,会努力在日后解开的。

浙公网安备 33010602011771号