赞
踩
在使用 Keil 编译基于 STM32F103 的 C 语言程序时,生成的汇编代码会有一些不同。STM32F103 是基于 ARM Cortex-M3 内核的微控制器,因为汇编语言是 ARM 汇编,而不是 x86 汇编。
示例 C 代码
假设我们有如下的简单 C 语言 for 循环代码:
void loop_example(void) {
for (int i = 0; i < 10; i++) {
// loop body
}
}
Keil 编译生成的 ARM 汇编代码
使用 Keil 编译器(如 ARMCC 或 ARMCLANG)编译上述代码,生成的汇编代码可能类似于以下内容。
loop_example PROC ; Setup the stack frame (if required) PUSH {lr} ; Save the link register ; Initialize i = 0 MOVS r1, #0 ; r1 = i = 0 loop_start ; Compare i with 10 CMP r1, #10 ; Compare i with 10 BGE loop_end ; If i >= 10, jump to loop_end ; Loop body ; (Insert loop body code here) ; Increment i ADDS r1, r1, #1 ; i++ ; Jump back to start of loop B loop_start loop_end ; Clean up and return POP {pc} ; Restore the link register and return ENDP
解释
关于寄存器和指令
注意事项
实际生成的汇编代码可能会根据具体的编译器优化选项和编写的 C 代码有所不同。
使用 Keil 编译器时,可以通过查看生成的 .asm 文件来查看编译后的汇编代码。(关于如何配置keil生成asm汇编文件,详见配置keil生成asm汇编文件)
同时可以看下这篇文章汇编 for循环
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。