x86 栈的使用有 rbp 和 rsp,只设计 rsp 可不可以?为什么?

12次阅读

共计 399 个字符,预计需要花费 1 分钟才能阅读完成。

https://zhuanlan.zhihu.com/p/656740329

在 x86-64 架构中,rbp 和 rsp 寄存器分别是栈帧基址指针(Base Pointer)和栈指针(Stack Pointer)。

看完了这篇文章,完全搞懂了函数调用过程中,rbp 和 rsp 的使用情况。

但是还是有一点不太理解,就是假如 CPU 只设计 rsp 可以吗?从我简单来看,好像也是可以够用的啊。我总结一下,无外乎是这些:

  • 函数使用过程中,减 rsp,用来放局部变量
  • 调用函数瞬间,硬件自动减 rsp,用来放 return Address
  • 下一个函数,继续减 rsp,用来放局部变量
  • 以此类推

返回过程:

  • 如果是“减 rsp,用来放局部变量”,那么直接加 rsp,就回收了栈空间。
  • 如果是“硬件自动减 rsp,用来放 return Address”,那么 pop 到 pc 即可(x86 里,ret 指令就是这个效果)

那从上面分析来看,只有 rsp,好像也能完成函数调用的工作啊?

正文完
 0