嵌入式Linux入门学习笔记(二)ARM汇编基础

ARM汇编基础

一.GNU汇编语法

1.基本语句结构
label:instruction @ comment
//llabel 即标号,表示地址位置,有些指令前面可能会有标号,这样就可以通过这个标号得到指令的地址,标号也可以用来表示数据地址
//label 后面的“:”,任何以“:”结尾的标识符都会被识别为一个标号 
//instruction 即指令,也就是汇编指令或伪指令。
//@符号,表示后面的是注释,就跟C 语言里面的“/*”和“*/”一样,其实在GNU 汇编文件中我们也可以使用“/*”和“*/”来注释 
//comment 就是注释内容。 

比如如下代码:
add: MOVS R0, #0X12 @设置R0=0X12
2.段

用户可以使用.section 伪操作来定义一个段
汇编系统预定义了一些段名:

.text 表示代码段
.data 初始化的数据段。 
.bss 未初始化的数据段。 
.rodata 只读数据段。

我们当然可以自己使用.section 来定义一个段,每个段以段名开始,以下一段名或者文件结尾结束,比如:

section .testsection @定义一个testsetcion 段
3.默认入口

汇编程序的默认入口标号是_start,不过我们也可以在链接脚本中使用 ENTRY 来指明其它的入口点,下面的代码就是使用_start 作为入口标号:

.global _start 

_start: 
       ldr r0, =0x12 @r0=0x12 
 //上面代码中.global 是伪操作,表示_start 是一个全局标号,类似 C 语言里面的全局变量一样
4.常见伪操作

汇编程序的默认入口标号是_start,不过我们也可以在链接脚本中使用 ENTRY 来指明其它的入口点,下面的代码就是使用_start 作为入口标号:

.global _start 

_start: 
       ldr r0, =0x12 @r0=0x12 
 //上面代码中.global 是伪操作,表示_start 是一个全局标号,类似 C 语言里面的全局变量一样
5.常用指令

1.MRS 指令
MRS 指令用于将特殊寄存器(如 CPSR 和 SPSR)中的数据传递给通用寄存器,要读取特殊寄存器的数据只能使用 MRS 指令!使用示例如下:

MRS R0, CPSR  @将特殊寄存器CPSR 里面的数据传递给 R0,即R0=CPSR 

2.MSR 指令
MSR 指令和MRS 刚好相反,MSR 指令用来将普通寄存器的数据传递给特殊寄存器,也就是写特殊寄存器,写特殊寄存器只能使用MSR,使用示例如下:

MSR CPSR, R0  @将R0 中的数据复制到 CPSR 中,即CPSR=R0 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>