上面是基础的反汇编指令
上面是原c函数
c函数得到的反汇编指令
1。mov指令把1和r4的值分别存到r1和r0寄存器中,
2.执行bl指令,把0x08002a32+4的地址保存到链接寄存器(LR
,即 R14
) 中,然后跳转到0x8002f34地址执行子程序(也就是add函数的开头地址)
3在add函数中
3.1把r0,r1,lr(存的返回地址0x08002a32+4)的值分别从右到左push(压)到栈里,从栈顶顺序往下,此时sp在栈顶的地址变成sp_inital-12,sp一直指向栈顶也就是会不断减小。
r0 <-----sp
r1
lr
3.2,sp,sp,#4此时把sp向上移动4个字节,
<-----sp
r0
r1
lr
3.3,再把栈里从sp+4开始的的8个字节的数据也就是r0和r1分别写入到r0和r1寄存器中
<-----sp
r0 <-----sp+4
r1 <-----sp+8
lr
3.4 ,计算 r0=r0+r1,把新的r0的值写入栈顶位置
r0=r0+r1 <-----sp
r0 <-----sp+4
r1 <-----sp+8
lr
3.5,在 ARM 汇编语言里,POP
指令是出栈操作指令,其功能与 PUSH
指令相反。PUSH
指令用于将寄存器的值压入栈中,而 POP
指令则是从栈中取出数据,并将其存储到指定的寄存器中。
R1<--r0=r0+r1
R2<--R0
R3<--R1
PC<--LR(及返回地址),pc为程序寄存器,它存储着下一条要执行的指令的地址,会跳转到add函数的下面。