1
3
这正是您可以使用r4-r11的时候,因为ABI指定被调用者必须保留这些值:) 寄存器r0-r3是调用者保存的,因此调用者必须确保在函数调用之前保存这些寄存器中存储的任何重要值。作为被调用者,你可以在这些寄存器上做任何你想做的事情。 |
2
1
寄存器比内存快,寄存器比二级缓存快,寄存器快一级缓存,寄存器快。通过使用R4-R8,您可以创建额外的存储和加载。在手工编码的汇编程序中,这将创建额外的指令。对于ARM叶汇编程序函数,没有序言,结尾是
你的陈述 似乎除了传递值之外,还可以使用r0-r3 对于许多算法和函数来说是不正确的。考虑GCD实现,
参数
因此,输入参数通常不需要保留。无需将它们复制到r4-r8并强制生成堆栈帧。ARM编译器将努力 不 这样做。人类不需要手动编写代码。如果必须这样做,除非你正在学习,否则最好让编译器生成代码。一个ARM 通用计算机 David Seal的ARM ARM算法是,
例程是五个指令。如果保存了输入参数,则例程的大小将加倍。
对于小输入,您可以将执行时间增加三倍。可以说,在没有额外代码的情况下,更容易理解汇编器。你不应该保存你不使用的寄存器。对于生产质量,使用专业代码总是有意义的
|
Ilya Loskutov · 无法将单词加载到寄存器中 2 年前 |
Ari157 · x86_64 Linux程序集中的逻辑与实现 2 年前 |
Arya · 汇编语言中的“标签”——操作码 2 年前 |
S1mple · 通过gcc生成64位共享库时的“未定义的主引用” 2 年前 |
R0M2 · 为什么“GCC”忽略汇编代码的-fno pic 2 年前 |
Akagi Akira · 如何在gnu汇编程序中组装MIPS cpu 2 年前 |