gpt4 book ai didi

c - 从 arm 程序集调用 c 函数时如何传递 long long 类型的参数?

转载 作者:太空狗 更新时间:2023-10-29 15:36:12 25 4
gpt4 key购买 nike

我有一个 C 函数女巫看起来像:

int foo(int a, long long b);

我试图从 arm 汇编中调用它,但我不知道如何处理第二个参数(long long)。

最佳答案

ARM EABI/AAPCS 规定 64 位类型应该在 2 个相邻的寄存器中传递,并且第一个寄存器必须是偶数。在小端模式中,高位部分位于编号较高的寄存器中,而低位部分位于编号较低的寄存器中。在大端模式下,反之亦然。

这两个要求都是为了适应 strd/ldrd 指令,它们可以在一条指令中保存两个寄存器。

因此,要在小端模式下为您的示例传递 0x0123456789abcdef,您必须按以下方式加载寄存器:

mov r0, a
// R1 is unused
ldr r2, =0x89abcdef
ldr r3, =0x01234567

关于c - 从 arm 程序集调用 c 函数时如何传递 long long 类型的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15609622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com