x86堆栈指针指向哪里?

时间:2012-12-27 19:49:21

标签: assembly x86 stack stack-pointer

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

4 个答案:

答案 0 :(得分:21)

维基百科说here

  

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

这就是我的回忆记忆它的作用方式。

答案 1 :(得分:15)

push eax

相当于:

sub esp, 4
mov [esp], eax

因此,推送后,esp将保留推送值的地址。

答案 2 :(得分:0)

我想我明白为什么OP会问这个问题。为什么第一个变量是SP的8个字节,而不是4?

经过一些研究后,我发现this表示:

SP + 0是旧的EBP SP + 4是旧的EIP(指令指针)

因此,当然,第一个参数是SP + 8。

答案 3 :(得分:0)

根据Lee Meador和Cory Nelson的回答,堆栈指针指向最后推送的值。

从英特尔®64和IA-32架构软件开发人员手册第2卷(2A,2B和2C):指令集参考,AZ,PUSH指令描述的第一行内容如下:

  

递减堆栈指针,然后将源操作数存储在   堆栈顶部。