函数体中 保存被调寄存器 的问题

zwlstc 2017-09-11 09:02:10


第4行 为何要减 栈针的值? 看上去没保存什么值啊
...全文
1344 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwlstc 2017-09-13
  • 打赏
  • 举报
回复
引用 2 楼 DelphiGuy 的回复:
注释不都说了align stack frame。 看代码的寄存器使用,应该是用的system v amd64 abi调用约定,在调用任何函数之前要保证栈框架16字节对齐,所以在进入p函数之前(某个call p指令之前),rsp是16字节对齐的,然后call p会压入8字节返回地址,进入p之后两个pushq指令压入16字节,所以在call Q之前还要调整一下rsp。
懂了 我本来以为返回地址算在上一个函数的栈帧里 所以不懂他是怎么对齐的
  • 打赏
  • 举报
回复
注释不都说了align stack frame。 看代码的寄存器使用,应该是用的system v amd64 abi调用约定,在调用任何函数之前要保证栈框架16字节对齐,所以在进入p函数之前(某个call p指令之前),rsp是16字节对齐的,然后call p会压入8字节返回地址,进入p之后两个pushq指令压入16字节,所以在call Q之前还要调整一下rsp。
zara 2017-09-11
  • 打赏
  • 举报
回复
这好像是64位的子程调用约定的要求,没做过64位的,只曾经看过点儿资料,具体可以搜索下看看,参数传递上,感觉复杂多了,一不小心估计就出错

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧