社区
Linux/Unix社区
帖子详情
arm 架构函数调用参数的传递
wjcapple
2018-10-08 05:19:46
arm的函数调用时,如果参数数目小于4,使用寄存器r0-r3进行传递,子函数内,再将参数拷贝到子函数栈中。这种传递参数的方式是脱裤子放屁还是另有深意?为何不直接使用x86的方式,由调用者将参数入栈,传递给子函数?arm的方式也不省空间,因为子函数还得将其从寄存器拷贝出来啊,何必多这几个操作。有图为证。欢迎拍砖。
...全文
454
1
打赏
收藏
arm 架构函数调用参数的传递
arm的函数调用时,如果参数数目小于4,使用寄存器r0-r3进行传递,子函数内,再将参数拷贝到子函数栈中。这种传递参数的方式是脱裤子放屁还是另有深意?为何不直接使用x86的方式,由调用者将参数入栈,传递给子函数?arm的方式也不省空间,因为子函数还得将其从寄存器拷贝出来啊,何必多这几个操作。有图为证。欢迎拍砖。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
john_liqinghan
2018-10-10
打赏
举报
回复
参数少时通过register传输参数应该速度比栈的速度快吧。我觉得X86应该也差不多,参数应该是优先是给register的。
在递归上效率会有较大的不同。
ARM
v8——
函数调用
参数
传递
对于
ARM
32
架构
,
函数调用
时前4个
参数
用通用寄存器 (R0~R3),其余的
参数
的用栈
传递
。对于
ARM
64
架构
,
函数调用
时前8个
参数
用通用寄存器 (X0~X7),其余的
参数
的用栈
传递
。分别使用32位和64位交叉编译器生成汇编文件。
X86和
ARM
:
函数调用
参数
传递
和返回值
X86 X86在调用函数的时候
参数
传递
ARM
架构
下的
函数调用
过程解析
总结起来,
ARM
架构
下的
函数调用
过程涉及
参数
传递
、寄存器保存与恢复、栈操作以及跳转指令的使用。在
ARM
架构
下,
函数调用
的过程涉及到栈的使用、寄存器的保存和恢复以及指令的跳转。在
ARM
架构
中,常用的需要保存的寄存器包括r4-r11、sp(栈指针)和lr(链接寄存器)。通过在
函数调用
前保存寄存器,并在
函数调用
结束后恢复寄存器的值,可以确保
函数调用
过程中不会破坏原有的寄存器状态。寄存器恢复:恢复在
函数调用
过程中保存的寄存器状态。将之前保存在栈中的寄存器值重新加载到相应的寄存器中,以恢复调用函数前的状态。
ARM
64
函数调用
流程分析
下图是介绍一个简单
函数调用
的示例,在该示例中简单介绍了栈的使用。
ARM
架构
下的
函数调用
过程
ARM
架构
下的
函数调用
过程包括
参数
传递
、寄存器保存、跳转到被调用函数、栈帧的设置、寄存器的使用、函数返回和寄存器恢复等步骤。寄存器保存:在调用函数之前,调用者需要保存一些寄存器的值,以防止被调用函数修改这些寄存器的值导致调用者的错误。BX LR指令会将链接寄存器LR中保存的地址作为跳转地址。寄存器恢复:调用者在被调用函数返回后需要恢复之前保存的寄存器的值,以保证程序的正确执行。在
函数调用
过程中,编译器会根据
ARM
架构
的规则生成相应的汇编代码,具体的寄存器使用和栈帧设置等细节可能会因编译器的不同而有所差异。
Linux/Unix社区
18,773
社区成员
11,463
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 专题技术讨论区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章