Arm 汇编实例解析
源代码
int global=19;
int main(int argc,char **argv)
{
int i, j;
i=1;
j=2;
if(j>2){
global=j;
} else {
global=i;
}
return 0;
}
编译:
Gcc test_arm.c
Objdump 后的结果
Objdump –CSDR >obj
Cat obj
00008350 <main>:
8350: e1a0c00d mov ip, sp
/* 把进入 main 之前的栈指针保存 */
8354: e92dd800 stmdb sp!, {fp, ip, lr, pc}
/* 把 fp 也即是栈底指针, ip (此时指向 sp )保存 , lr 也就是返回地址保存, pc 当前指令地址保存(为实际的值加 8 ) */
8358: e24cb004 sub fp, ip, #4 ; 0x4