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

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

How to get multiresult with multicondition in Sql Server -