通过汇编指令理解 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
|
版权声明:本文为CSDN博主「EINT」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/m0_56548489/article/details/123604723