不同编译器ARM MCU的指令与伪指令相同吗?
在ARM MCU开发中,指令集和伪指令的一致性取决于以下因素:
一、ARM指令集(核心指令)的一致性
ARM指令集(如数据处理指令、跳转指令、内存访问指令等)由ARM架构(如ARMv6-M、ARMv7-M、ARMv8-M等)严格定义,与编译器无关。
只要目标MCU基于相同的ARM内核(如Cortex-M0、Cortex-M3、Cortex-M4等),核心指令的编码和功能完全一致,不同编译器(如GCC、Keil、IAR、Clang等)对这些指令的支持是统一的。
例:
- 指令
ADD R0, R1, R2
(将R1和R2相加存入R0)在所有支持ARMv7-M的编译器中含义和编码相同。 - 指令
BL main
(带链接跳转)在所有ARM编译器中功能一致。
二、伪指令(Assembler Directives)的差异性
伪指令是编译器/汇编器特有的辅助指令,用于定义符号、数据、段、宏等,不同编译器的伪指令语法和功能可能不同。以下是常见编译器的差异举例:
1. 符号定义伪指令
功能 | GNU AS |
---|