首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数中注册使用的ARMv6最佳实践

函数中注册使用的ARMv6最佳实践
EN

Stack Overflow用户
提问于 2014-09-07 00:29:12
回答 1查看 544关注 0票数 2

大会的总n00b,但我觉得我掌握了它的诀窍。但是,我有一个关于在函数中使用寄存器的最佳实践的问题。

据我所知:在ARM11上的13个可用通用寄存器中,按照约定,寄存器0-3用于传递参数(0&1也用于返回值),而4-12用于存储函数持续时间内的工作值。

不过,我还看到了一些代码示例,在这些例子中,只要有任何一个可用,人们也可以使用寄存器0-3作为工作值,因为它们不需要在堆栈上使用先前值的push & pop。

虽然我能理解为什么有人想要避免额外的推送和弹出步骤,但似乎除了传递函数的值之外,使用r0-r3可能会导致今后的问题(因为您无法保证调用的任何函数都会保留它们的值)。

那么,这里的最佳实践是什么呢?我应该什么时候(如果曾经)使用寄存器0-3作为工作值,什么时候我应该使用寄存器4-12?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-07 03:08:08

似乎除了在函数中传递值外,使用r0-r3进行任何操作都可能导致问题(因为您无法保证调用的任何函数都会保留它们的值)。

这正是您可以使用r4-r11的时间,因为ABI指定被调用者必须保留这些值:)

寄存器r0-r3是调用方保存的,因此调用方必须确保在函数调用之前保存存储在这些寄存器中的任何重要值。作为被叫人,你可以在这些登记簿上做你想做的任何事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25706022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档