add.s26sp=sp-32口aeose 1→x0—→stack(a)high_addr2→x0→stack(b)sp stack(a)→xlsp+241(a) stack(b)一→x0sp+162(b)sp+83(c)口x0=x0+×1sp=sp-32x1=1 x0stack(c)x0=3low_addr口sp=sp+32registerstackretARM032019/3/3
add.s ARM03 2019/3/3 26 sp=sp -32 1 →x0 →stack(a) 2 →x0 →stack(b) stack(a) →x1 stack(b) →x0 x0=x0+x1 x0→stack(c) sp=sp+32 ret Local variables is stored by register Addition is conducted by register high_addr low_addr sp sp=sp -32 sp+24 sp+16 sp+8 stack 1(a) 2(b) 3(c) x1=1 x0=3 register
add.s27main:sp,sp,#0x20口subhigh_addrx0,#0x1//#1口movstrx0, [sp,#24]口spx0,#0x2 // #2口movstrx0, [sp,#16]口Idrx1,[sp,#24]口Idrx0, [sp,#16]口addx0, x1, x0口×1=2X0=2x0, [sp,#8]str口low_addraddsp,sp,#0x20口registerstackret口ARM032019/3/3
add.s ARM03 2019/3/3 27 main: sub sp, sp, #0x20 mov x0, #0x1 // #1 str x0, [sp,#24] mov x0, #0x2 // #2 str x0, [sp,#16] ldr x1, [sp,#24] ldr x0, [sp,#16] add x0, x1, x0 str x0, [sp,#8] add sp, sp, #0x20 ret high_addr low_addr sp stack x1=? x0=? register
add.s28main:sp,sp,#0x20口subhigh_addrx0,#0x1 //#1口movx0, [sp,#24]str口Px0,#0x2 // #2口movstrx0, [sp,#16]口Idrx1,[sp,#24]口Idrx0, [sp,#16]口sp=sp-32addx0, x1, x0口×1=2X0=2x0, [sp,#8]str口low_addraddsp,sp,#0x20口registerstackret口ARM032019/3/3
add.s ARM03 2019/3/3 28 main: sub sp, sp, #0x20 mov x0, #0x1 // #1 str x0, [sp,#24] mov x0, #0x2 // #2 str x0, [sp,#16] ldr x1, [sp,#24] ldr x0, [sp,#16] add x0, x1, x0 str x0, [sp,#8] add sp, sp, #0x20 ret high_addr low_addr sp sp=sp-32 stack x1=? x0=? register
add.s29main:sp,sp,#0x20口subhigh_addrx0,#0x1 // #1口movx0, [sp,#24]str口Px0,#0x2 // #2口movstrx0, [sp,#16]口Idrx1,[sp,#24]口Idrx0, [sp,#16]口sp=sp-32addx0, x1, x0口×1=2x0=1x0, [sp,#8]str口low_addraddsp,sp,#0x20口registerstackret口ARM032019/3/3
add.s ARM03 2019/3/3 29 main: sub sp, sp, #0x20 mov x0, #0x1 // #1 str x0, [sp,#24] mov x0, #0x2 // #2 str x0, [sp,#16] ldr x1, [sp,#24] ldr x0, [sp,#16] add x0, x1, x0 str x0, [sp,#8] add sp, sp, #0x20 ret high_addr low_addr sp sp=sp-32 stack x1=? x0=1 register
add.s30main:sp,sp,#0x20口subhigh_addrx0,#0x1//#1口movx0, [sp,#24]str口spx0,#0x2 //#2口movsp+241(a)strx0, [sp,#16]口Idrx1,[sp,#24]口Idrx0, [sp,#16]口sp=sp-32addx0, x1, x0口×1=2x0=1x0, [sp,#8]str口low_addraddsp,sp,#0x20口registerstackret口ARM032019/3/3
add.s ARM03 2019/3/3 30 main: sub sp, sp, #0x20 mov x0, #0x1 // #1 str x0, [sp,#24] mov x0, #0x2 // #2 str x0, [sp,#16] ldr x1, [sp,#24] ldr x0, [sp,#16] add x0, x1, x0 str x0, [sp,#8] add sp, sp, #0x20 ret high_addr low_addr sp sp=sp-32 sp+24 stack 1(a) x1=? x0=1 register