大会的总n00b,但我觉得我掌握了它的诀窍。但是,我有一个关于在函数中使用寄存器的最佳实践的问题。
据我所知:在ARM11上的13个可用通用寄存器中,按照约定,寄存器0-3用于传递参数(0&1也用于返回值),而4-12用于存储函数持续时间内的工作值。
不过,我还看到了一些代码示例,在这些例子中,只要有任何一个可用,人们也可以使用寄存器0-3作为工作值,因为它们不需要在堆栈上使用先前值的push & pop。
虽然我能理解为什么有人想要避免额外的推送和弹出步骤,但似乎除了传递函数的值之外,使用r0-r3可能会导致今后的问题(因为您无法保证调用的任何函数都会保留它们的值)。
那么,这里的最佳实践是什么呢?我应该什么时候(如果曾经)使用寄存器0-3作为工作值,什么时候我应该使用寄存器4-12?
发布于 2014-09-07 03:08:08
似乎除了在函数中传递值外,使用r0-r3进行任何操作都可能导致问题(因为您无法保证调用的任何函数都会保留它们的值)。
这正是您可以使用r4-r11的时间,因为ABI指定被调用者必须保留这些值:)
寄存器r0-r3是调用方保存的,因此调用方必须确保在函数调用之前保存存储在这些寄存器中的任何重要值。作为被叫人,你可以在这些登记簿上做你想做的任何事情。
https://stackoverflow.com/questions/25706022
复制相似问题