1
3
这正是您可以使用r4-r11的时候,因为ABI指定被调用者必须保留这些值:) 寄存器r0-r3是调用者保存的,因此调用者必须确保在函数调用之前保存这些寄存器中存储的任何重要值。作为被调用者,你可以在这些寄存器上做任何你想做的事情。 |
2
1
寄存器比内存快,寄存器比二级缓存快,寄存器快一级缓存,寄存器快。通过使用R4-R8,您可以创建额外的存储和加载。在手工编码的汇编程序中,这将创建额外的指令。对于ARM叶汇编程序函数,没有序言,结尾是
你的陈述 似乎除了传递值之外,还可以使用r0-r3 对于许多算法和函数来说是不正确的。考虑GCD实现,
参数
因此,输入参数通常不需要保留。无需将它们复制到r4-r8并强制生成堆栈帧。ARM编译器将努力 不 这样做。人类不需要手动编写代码。如果必须这样做,除非你正在学习,否则最好让编译器生成代码。一个ARM 通用计算机 David Seal的ARM ARM算法是,
例程是五个指令。如果保存了输入参数,则例程的大小将加倍。
对于小输入,您可以将执行时间增加三倍。可以说,在没有额外代码的情况下,更容易理解汇编器。你不应该保存你不使用的寄存器。对于生产质量,使用专业代码总是有意义的
|
Tedi · 在保存和检索机制之间包含命令的代码 7 年前 |
Bibrak · 如何从程序集传递堆栈中某个位置的内存地址? 7 年前 |
G. Guidi · 为什么寄存器$v0被保存? 7 年前 |
Vagish · C:通过引用传递自动变量 7 年前 |
St.Antario · 了解cpu寄存器 7 年前 |
Dfarrelly · x86给定AH和AL计算AX? 8 年前 |
CRThaze · 函数中寄存器使用的ARMv6最佳实践 10 年前 |