Alientek I.MX6UL Linux- 第七章 ARM汇编基础

  学习汇编的目的:初始化C语言运行环境。

GNU汇编语法

label:instruction@comment
label:标号,表示地址位置,有些指令前面可能会有标号
instruction:指令,即汇编指令或者伪指令
@:注释符号
comment:注释内容
示例代码:
add:
MOVS R0, #0X12 @设置 R0=0X12

注意! ARM中的指令、伪指令、伪操作、寄存器名等可以全部使用大写,也可以全部使用
小写,但是不能大小写混用。

用户可以使用.section伪操作来定义一个段,汇编系统预定义了一些段名:
.text 表示代码段
.data 表示初始化的数据段
.base 表示未初始化的数据段
.rodata 表示只读数据段

Contex-A7常用的汇编指令

  处理器做的最多的事情就是在处理器内部来回传递数据,常见的操作有:

  1. 将数据从一个寄存器传递到另一个寄存器。
  2. 将数据从一个寄存器传递到特殊寄存器,如CPSR和SPSR.
  3. 将立即数传递到寄存器。
    数据传输常用的指令有三个:MOV、MRS、MSR.

处理器内部传输指令

指令目的描述
MOVR0RI将R1里面的数据复制到R0中
MRSR0CPSR将特殊寄存器CPSR里面的数据复制到R0
MSRCPSRRI将R1里面的数据复制到特殊寄存器CPSR里

存储器访问指令

指令描述
LDR Rd, [Rn , #offset]从存储器Rn+offset的位置读取数据存放到 Rd中
STR Rd, [Rn, #offset]将Rd中的数据写入到存储器中的 Rn+offset位置。

压栈和出栈指令

指令描述
PUSH 将寄存器列表入栈
POP 从栈中恢复寄存器列表

PUSH 和POP 的另外一种写法是“STMFD SP!”和“LDMFD SP!”。

跳转指令

  有多种跳转指令

  1. 直接使用调转指令B、BL、BX等。
  2. 直接向PC寄存器里面写入数据。
指令描述
B 调转到label,如果跳转范围超过+/-2KB,可以指定B.W
BX 间接跳转,跳转到存放Rm中的地址处,并且切换指令集
Bl 跳转到标号地址,并将返回地址保存在LR中
BlX 结合BX和BL的特点,跳转到Rm指定的地址,并将返回地址保存在LR中,切换指令集
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值