学习GNU汇编语法

前言最近在学习cortex-a的linux编程,拿到的是《原子嵌入式linux驱动开发说解》,文中说到,如果想要学习好uboot和linux内核,就必须要学会汇编。
gnu汇编语法我们在使用过的stm32中的mdk与iar下启动文件startup_stmp32f10x_hd.s中的汇编语法是有所不同的,所以不用将mdk下的汇编文件直接复制到iar下去编译,这是因为mdk和iar的编译器不同,因此汇编语法就有一些区别,arm汇编使用的是gcc交叉编译器,所以汇编代码要符合gnu语法。
gnu汇编语法适用于所有的架构,并不是arm独享的,gnu汇编由一系列的语句组成,每行一条语句,每条语句有3个可选部分,解释如下:
label:instruction @ comment
lable : 即标号,表示地址位置,有些指令前面可能会有标号,这样就可以通这个标号得到指令的地址,标号也可以用来表数据地址,注意label后面的“:,任何以:结尾的标识符者会被识别为一个标号。
instruction : 即指令,也就是汇编指令的伪指令。
@符号:表示后面的是注释,就跟c语言中的”/ “和” /“一样的,其实在gnu汇编文件中我们也可以使用/ 和 /”来注释。
comment :就是注释内容。
代码如下所示
add:movs r0, #0x123 @设置 r0=0x123上面的代码中add:”就是标号,“movs r0,#0x123就是指令,最后的@设置 r0=0x123就是注释。
注意:arm中的指令,伪指令、伪操作、寄存器名等可以全部使用大写,也可以全部使用小写,但是不能大小写混用。
用户可以使用.section伪操作来定义一个段,汇编系统预定义一些段名,解释如下:
.tex :表示代码段。
.data :初始化的数据段。
.bss :未初始化的数据段。
.rodata :只读数据段。
我们当然可以使用.section来定义一个段,每个段以段名开始,以下一段名或者文件结尾结束。代码如下:
.section .testsection @定义一个testsection段汇编程序的黙认入口标号是_start,不过我们可以在链接脚本中使用entry来指明其他的入口点,下面的代码就是使用_start作为入口标号。
.gloabl _start_start:ldr r0, =0x12 @ 给r0移入0x123.上面代码中,global是伪操作,表示_start 是一个全局标号,类似c语言中的全局变量一样,下面为常见的伪操作。
.byte :定义单字节数据,比如.byte 0x123。
.short :定义双字节数据,比如.short 0x1234。
.long :定义一个4字节数据,比如.long 0x12345678。
.equ :赋值语句,格式为.equ变量名,表达式如.equ num,0x123 表示num = 0x123。
.align :数据字节对齐,如.align 4 表示4字节对齐。
.end :表示源文件结束。
.global :定义一个全局符号,格式为.global sysmbol,比如 .global _start。
gnu汇编还有其他的伪操作,最常见的如上所示。如果想详细地了解全部的伪操作,可以参考《arm cortex-a(armv7)编程手册v4.0》中的相关内容。
gnu汇编同样也支持函数,函数格式如下:
函数名:函数体返回语句gnu汇编函数返回语句不是必需要的,以下示例就是汇编写的cortex-a7中断服务函数:
/* 未定义中断 */undef ined_handler: ldr r0, = undefined_handler bx r0/* svc 中断 */ ldr r0, = svc_handler bx r0/* 预取终止中断 */ ldr r0, = prefabort_handler bx r0上述代码中定义了3个汇编函数:unddefined_handler、svc_handler和prefabort_handler。以undefined_handler函数为来看汇编函数组成,undefined_handler“就是函数名,ldr r0, = undefined_handler”是函数体,“bx r0是函数返回语句,bx指令是返回指令,函数返回语句不是秘需的。

小米6发布会雷军将给壕送十台小米6,观众回复:现货才是真!
卡萨帝设计前卫难融入家居?来001号店看过后再下结论
国美618小家电,打造不一样的全新美好生活
锐成芯微加速国产集成电路产业的发展
全球首个汽车SOA平台开发者将在四月召开!
学习GNU汇编语法
有谁知道智慧医疗是怎么实现的吗?启明WiFi+BlE模组应用方案
各国建立脸部识别系统的原因是什么
安徽省首条5G自动驾驶开放道路示范线已投入试运营
EVgo正建设美国公共快速充电站最大的电池储能系统
巴基斯坦首个高压直流输电线路项目将按时完成,由中国公司赞助
嘉合劲威成功入选“2022年度第五届IC独角兽”榜单
新基建时代到来,智慧路灯发展迎来机遇
哈啰出行升级智慧运营系统,加速车辆调度
关于数据对汽车互联未来的分析和介绍
关于超级电容器的原理及其应用的介绍
中美半导体巨头重磅和解 美光和福建晋华达成全球和解协议
Arm64栈回溯 结构介绍
HSDPA打造移动宽带的高速引擎
一文详解自力式压力调节阀