assembly - Why int64 use three registers in arm? -
i write helloworld this:
#include <stdio.h> int main() { uint64_t x = 0xffffffff0; printf("x=%llu\n", x); return 0; } in opinion, printf use r0,r1,r2 parameters, r0 addr of string, , r1&r2 value of x(according ihi0042e_aapcs.pdf):
c.3 if argument requires double-word alignment (8-byte), ncrn rounded next register number. however, when objdump it, found asm is:
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> obviously, r2 0xfffffff0 low 32 bits of x, , r3 high 32 bits of x. , r0 addr of string. r1? parameter r0-r3? confused, please me, thanks!
Comments
Post a Comment