在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的内容发生了改变
本文解释了在debug环境中,通过特定汇编指令设置栈顶后,2000:0~2000:f内存区域内容发生变化的原因。这是由于debug器在单步执行时将标志寄存器、cs、ip等信息保存到了用户程序定义的栈中。

4506

被折叠的 条评论
为什么被折叠?



