x86堆栈指针指向哪里?

use*_*619 13 x86 assembly stack stack-pointer

例如,如果我按下ax,[SP]指向我的ax值或ax之后的单词?它是否与实模式保护模式不同?我问这个是因为汇编书的艺术说明和解释为最后推送数据的sp点,并且在这个页面上OSDev Wiki -在最后推送数据之后它指向空白字的堆栈.

Lee*_*dor 21

维基百科在这里说:

使用隐式递减(推送)和递增(弹出)堆栈指针实现堆栈.在16位模式下,这个隐式堆栈指针被寻址为SS:[SP],在32位模式下它是SS:[ESP],在64位模式下它是[RSP].堆栈指针实际上指向存储的最后一个值,假设它的大小将与处理器的操作模式匹配(即16,32或64位)以匹配push/pop/call的默认宽度/ ret指令.

这就是我的回忆记忆它的工作方式.


Cor*_*son 16

push eax
Run Code Online (Sandbox Code Playgroud)

相当于:

sub esp, 4
mov [esp], eax
Run Code Online (Sandbox Code Playgroud)

因此,在推送之后,esp将保持推送值的地址.