私は次のように helloworld を書きます。
#include <stdio.h>
int main()
{
uint64_t x = 0xffffffff0;
printf("x=%llu\n", x);
return 0;
}
私の意見では、printf は r0、r1、r2 をパラメーターとして使用し、r0 は文字列の addr、r1&r2 は x の値です (IHI0042E_aapcs.pdf によると):
C.3 If the argument requires double-word alignment (8-byte), the NCRN is rounded up to the next even
register number.
ただし、objdump を実行すると、asm が次のようになっていることがわかりました。
8430: 4804 ldr r0, [pc, #16] ;
8432: f06f 020f mvn.w r2, #15
8436: b510 push {r4, lr}
8438: 230f movs r3, #15
843a: 4478 add r0, pc
843c: f7ff efda blx 83f4 <printf@plt>
明らかに、r2 は x の下位 32 ビットとして 0xfffffff0 であり、r3 は x の上位 32 ビットです。r0 は文字列のアドレスです。では、r1 はどうでしょうか。パラメータはr0~r3? 私は混乱していました、助けてください、ありがとう!