通过汇编指令理解 CPU 是如何执行 C 代码的
- //及其简单的 C 代码
- int main(void)
- {
- volatile int a; // 三个局部变量都要 push 到栈中,栈指针通过 sp 来表示
- volatile int b;
- volatile int c;
-
- a = 1;
- b = 1;
- c = a+b;
- }
- // 将 c 反汇编后,对应下面的图看
- i.main
- main
- 0x08000242: b50e .. PUSH {r1-r3,lr} // 从右到左 push
- 0x08000244: 2001 . MOVS r0,#1 // 将立即数 1 放到 cpu 寄存器 r0 中
- 0x08000246: 9002 .. STR r0,[sp,#8] // 将 r0 中的值存储到 sp + 8 的地址中去
- 0x08000248: 9001 .. STR r0,[sp,#4]
- 0x0800024a: e9dd1001 .... LDRD r1,r0,[sp,#4]
- 0x0800024e: 4408 .D ADD r0,r0,r1
- 0x08000250: 9000 .. STR r0,[sp,#0] // sp + 0 的地址便是 c 的地址
- 0x08000252: 2000 . MOVS r0,#0
- 0x08000254: bd0e .. POP {r1-r3,pc}
- 0x08000256: 0000 .. MOVS r0,r0
|