https://godbolt.org/
int square(int num) {
return num * num;
}
square(int):
sub sp, sp, #4 //队指针寄存器 sp sp=sp-4 开辟栈空间 递减
str r0, [sp] //r0寄存器的值写入sp对应的地址上 ->寄存器的值写到外部
ldr r0, [sp] //sp的值写入r0寄存器
mul r1, r0, r0 //r1=r0*r0
mov r0, r1 //寻址 r1指向r0
add sp, sp, #4 //sp=sp+4 恢复 递增
bx lr //返回结果 指向lr寄存器
int m = 8;
int fun(int a,int b)
{
int c = 0;
c = a + b;
return c;
}
int main()
{
int i = 4;
int j = 5;
m = fun(i, j);
return 0;
}
fun(int, int):
sub sp, sp, #12
str r0, [sp, #8]
str r1, [sp, #4]
mov r0, #0
str r0, [sp]
ldr r0, [sp, #8]
ldr r1, [sp, #4]
add r0, r0, r1
str r0, [sp]
ldr r0, [sp]
add sp, sp, #12
bx lr
main:
push {r11, lr}
mov r11, sp
sub sp, sp, #16
mov r0, #0
str r0, [r11, #-4]
mov r1, #4
str r1, [sp, #8]
mov r1, #5
str r1, [sp, #4]
ldr r1, [sp, #8]
ldr r2, [sp, #4]
str r0, [sp] @ 4-byte Spill
mov r0, r1
mov r1, r2
bl fun(int, int)
ldr r1, .LCPI1_0
str r0, [r1]
ldr r0, [sp] @ 4-byte Reload
mov sp, r11
pop {r11, lr}
bx lr
.LCPI1_0:
.long m
m:
.long 8 @ 0x8