ARM AArch64堆栈管理

时间:2015-07-10 17:30:24

标签: assembly arm 64-bit calling-convention arm64

ARMv8没有64位堆栈的能力吗?我知道AArch64上没有push和pop指令,所以堆栈管理留给AArch32进行参数传递等等吗?我们如何通过48位地址?我总体上对在AArch64中操作时函数调用的工作方式感到困惑。

1 个答案:

答案 0 :(得分:3)

就像在32位 * 中一样,SP是any load/store instruction的有效基址寄存器,所以机制并不是那么不同。不同的是,SP不再是一个通用的寄存器,你可以做任何你想做的事情,你不再有可变的加载/存储多个操作,并且没有程序员友好的别名。因此,典型的推动"将是:

stp xn, xm, [sp, #-16]!

请注意,您通常应使用stp / ldp支持str / ldr,以便在堆栈上运行时保持一致(特别是当您拥有时)硬件对齐检查已打开) - 如果您只关注一个注册表,请按/弹出xzr以填补空白。

*请记住,例如&#34;推&#34;在ARM指令集中,只是stmdb r13!, {rn, ..., rm}str rn, [sp, #-4]!的汇编程序别名,并且这些别名仅作为Thumb-2的一部分使用统一汇编语言引入。特定的推/弹指令 出现在原始的16位Thumb中,因为SP不能在正常的加载/存储操作中编码,只能在低寄存器上操作。 < / p>