一、d 命令配合段寄存器
①
②
③
二、mov sp,10 到哪里去了
为什么 mov sp,×× 会紧跟在 mov ss,×× 后面执行?
这是CPU的一种机制,是为了防止/在/对栈指针初始化/之前/被打断的,所以在执行mov ss,***之后会立即执行下一条指令
第二个问题:
为什么会修改栈里面的内容 (栈里面有 IP CS 的内容)
DEBUG是用CPU的陷阱【中断】(每执行一条指令就触发一次这个中断)实现单步中断的。(中断使 CPU硬件自动将SS、ESP、EFLAGS、CS、EIP这5个寄存器的数值按照这个顺序压入进程0的内核栈。)
中断会把CS和IP的值弄到栈里。处理中断需要调用另外的程序,调用其他的程序的时候(上下文切换),需要先将寄存器里面的内容压入栈当中。