曹大,关于函数调用时寄存器的位置,伪SP, 硬件SP, FP

曹大,关于函数调用时寄存器的位置,伪SP, 硬件SP, FP

函数调用时,栈是从高地址向低地址增长?


虚拟的SP寄存器,指向的对应的是栈的底部,其实高地址?


真的硬件SP寄存器对应的是栈顶,其实对应的是低地址?


调用方在调用函数时,已经将被方的入参和返回地址分配自己当前的栈上,所以被调方通过 FP+offset 的方式访问入参和返回值?


被调函数通过虚拟的SP减去偏移量访问局部变量,最先分配的局部变量其实离虚拟的SP远,离硬件SP近?

例如:


func p() {

 var a int

 var b int

 var c int

}


访问a其实是 a-24(SP) 或者 0(SP)? 


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
Xargin 2021-05-20 00:41:00

你这个就比较卷了,要学细节看看我以前写的 plan9 汇编总结吧


https://github.com/cch123/golang-notes/blob/master/assembly.md


里面应该能解答大部分 plan9 汇编的疑问

  • 提问者 MichaelFu #1

    看明白了,曹大,确实有点卷,以前汇编甚少接触,Go的 runtime 里面有很多汇编代码,想知道啥意思

    2021-05-20 22:31:57
  • Xargin 回复 提问者 MichaelFu #2

    嗯,没事,有问题就问答区问,都会回复的~

    2021-05-21 14:55:41
  • 助教_小R 回复 提问者 MichaelFu #3

    卷王你好~

    2021-05-22 16:45:47
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师