ARM多寄存器加载/存储指令

ARM中如何实现跳转?

a. 直接向PC 寄存器赋值实现跳转
MOV PC ,R14

b.使用分支指令直接跳转

分支指令种类
1.B:分支指令
2.BL:带链接的分支指令(可返回)
3.BX:带状态切换的分支指令

多寄存器加载/存储指令:

可以实现在一组寄存器和一块连续的内存但愿之间传输数据

LDM 加载多个寄存器
STM 存储多个寄存器
(允许1条指令传送16个寄存器的任何子集或所有寄存器,主要用于现场保护.数据复制.常数传递等)

详情举例:

加载指令:

LDM 源地址,目标寄存器列表
(从源地址 -----> 目标寄存器列表)

存储指令:

STM 目标地址,源寄存器列表
(从源寄存器列表---->目标地址)

LDM/STM指令搭配不同的后缀实现不同的方式地址增长:
IA:每次传送后地址+4
IB:每次传送前地址+4
DA:每次传送后地址-4
DB:每次传送前地址-4

举例如图:
在这里插入图片描述

这里大家会不会想到堆栈操作里面的 满堆栈 和 空堆栈 里面的一系列操作呢?
其实他们之间是有相互关系的,当然,如果不了解什么是空堆栈和满堆栈的话,可以查看以下博客:ARM处理器寻址方式 之 堆栈寻址

关系如下图所示

在这里插入图片描述

在这里插入图片描述

最大区别
数据传送:使用临时寄存器作为基址来寻址
堆栈操作:使用SP寄存器作为基址来寻址

堆栈操作图

在这里插入图片描述
在这里插入图片描述

特殊情况

在这里插入图片描述
右上角多了一个^符号
表示SPSR(程序状态保存寄存器)要对CPSR(程序状态寄存器)进行还原(即取出数据来进行覆盖),进行程序状态寄存器的还原

寄存器和存储器交换指令:
SWP指令用于将一个内存但愿(该内存地址放在寄存器Rn中)的内容读取到一个寄存器Rd中,同时将另一个寄存器Rm的内容写入到该内存单元中。使用SWP可实现信号量的操作。(注:Rm和Rd可以相同
SWP 读入寄存器 ,输出寄存器 ,目标地址
首先把 目标地址里面的值取出放入到读入寄存器中,
然后把输出寄存器里面的值取出来存储到目标地址的内存单元。

(可以带后缀B,代表字节操作,不带B的默认是字 数据操作)

数据处理指令大致分为3类:
a.数据传送指令
b.算数逻辑运算指令
c.比较指令

数据处理指令只能对寄存器的内容进行操作,而不能对内存中的数据进行操作。所有的ARM数据处理指令均可选择使用S后缀,并影响(CPSR寄存器)标志状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值