ARM GNU汇编常用指令

1.内部数据传输

1.1 MOV
用于将数据从一个寄存器拷贝到宁外一个寄存器。

MOV R0,R1   @R0 = R1
MOV R0, #0X12	@R0 = 0X12

1.2 MRS
用于将 特殊寄存器(CPSR,SPSR)中的数据传递给通用寄存器。(读取特殊寄存器值)

MRS CPSR,R0

1.3 MSR
用于将普通寄存器的数据传递给特殊寄存器(写特殊寄存器)

MSR CPSR,R0

2.存储器访问

由于ARM不能直接访问存储器,一般汇编配置借助存储器访问指令。先将配置值写入到Rx(0-12)中,然后借助存储器访问指令写入到寄存器中。

2.1 LDR
用于从存储器中加载数据到寄存器RX中。

LDR R0,=0x20000000  @将寄存器地址加载到R0中
LDR R1,[R0] @ 读取地址0x20000000的数据到R1寄存器中

2.2 STR
用于写入数据到存储器。

LDR R0, =0X20000000 @将寄存器地址加载到R0中
LDR R1, =0XFFFFFFFF @ R1 保存写入的数据 R1 = 0XFFFFFFFF 
STR R1,[R0] @ 将R1的值写入到R0所保存的地址中

3.压栈出栈

3.1 push
保存寄存器值,将寄存器值压入栈中,从SP指针向下增长。

push {lr}
push {r0~r3,r12} 

3.2 pop
取出寄存器保存值

pop {lr} @ 先恢复lr
pop {r0~r3,r12}

4.跳转

4.1 B
B指令用于跳转到目标地址,调用函数不返回原来执行处,使用B指令。

_start:
LDR SP,=0X80200000 @设置栈指针
b main @跳转到main函数

4.2 BL
跳转目标地址,并保存返回地址到LR中。可以通过加载LR的值继续从跳转之前的代码运行。

psuh {r0,r1} 	@保存r0,r1
cps #0x13 	@进入SVC模式,允许其他中断再次进去
bl system_irqhander		@加载C语言中断处理函数
cps #0x12	@进入IRQ模式
pop {r0,r1}
str r0,[r1,#0x10]
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值