在debug环境下,
先设置2000:0~2000:f内存单元值为0,再运行汇编代码如下:
mov ax, 2000
mov ss, ax
mov sp, 10
mov ax, 3123
push ax
mov ax, 3366
push ax
为什么运行过程中2000:0~2000:f中内容发生改变?
解释:
单步中断工作方式导致。
用户程序重设了栈顶位置,使得debug的栈顶指向了用户程序中设置的栈顶,debug单步执行保存标志寄存器,cs,ip和中断处理程序用到的寄存器都保存到了用户程序定义的栈中,也就是2000:0~2000:f的位置,所以2000:0~2000:f的内容发生了改变