Linux--汇编语法配置初始化的原理

时间:2025-03-28 07:44:55

GNU 汇编语法

Keil MDK与IAR的编译器不一样,底层的汇编语法也不一样,那一样的c语言由编译器转换成底层汇编语言也是不同的汇编语法,所以启动文件也得不同的汇编语法来编辑

编译器的作用就是根据汇编语法,把C语言 python Java 等等现成简单的编程语言转换成底层汇编语言

我们用的Linux开发,使用gcc编译,转换的底层是GNU汇编语法

如果大家使用过 STM32 的话就会知道 MDK 和 IAR 下的启动文件 startup_stm32f10x_hd.s

其中的汇编语法是有所不同的,将 MDK 下的汇编文件直接复制到 IAR 下去编译就会出错,因

为 MDK 和 IAR 的编译器不同,因此对于汇编的语法就有一些小区别。我们要编写的是 ARM

汇编,编译使用的 GCC 交叉编译器,所以我们的汇编代码要符合 GNU 语法。
GNU 汇编语法适用于所有的架构,并不是 ARM 独享的, GNU 汇编由一系列的语句组成,
每行一条语句,每条语句有三个可选部分,如下:
label instruction @ comment
label 即标号,表示地址位置,有些指令前面可能会有标号,这样就可以通过这个标号得到
指令的地址,标号也可以用来表示数据地址。注意 label 后面的“:”,任何以“:”结尾的标识
符都会被识别为一个标号。
instruction 即指令,也就是汇编指令或伪指令。
@ 符号,表示后面的是注释,就跟 C 语言里面的“ /* ”和“ */ ”一样,其实在 GNU 汇编文
件中我们也可以使用“ /* ”和“ */ ”来注释。
comment 就是注释内容。
比如如下代码:
add:
MOVS R0, #0X12 @ 设置 R0=0X12
上面代码中“ add: ”就是标号,“ MOVS R0,#0X12 ”就是指令,最后的“ @ 设置 R0=0X12 ”就是
注释。
注意! ARM 中的指令、伪指令、伪操作、寄存器名等可以全部使用大写,也可以全部使用
小写,但是不能大小写混用。