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寄存器)标志状态
ARM多寄存器加载/存储指令相关推荐
- ARM的批量加载/存储指令
批量加载/存储指令格式: LDMXX|STMXX{条件符}{寻址模式}Rb{!},{寄存器列表} 其中XX表示IA/IB/DA/DB. LDMIA/STMIA 访问/存储后地址递增(Increm ...
- 自己动手写CPU(8)加载存储指令的实现
自己动手写CPU(8)加载存储指令的实现 好久没更新blog了,暑假提前放了.现在收假也该收收心了,继续捡起之前的CPU,自己开的坑不管咋样把它填完吧. 指令介绍 1.加载指令 2.存储指令 修改系统 ...
- 【五级流水线CPU】—— 6. 加载存储指令(14)
文章目录 1. 初步 12条 1.1 分析 1.2 添加数据存储器RAM 1.3 修改最小SOPC 2.3 测试9 加载存储指令 2. load-use数据冒险 测试10 load-use数据冒险的解 ...
- 【自己动手写CPU】加载存储指令的实现
目标 修改之前一直做测试的sopc,为其添加数据RAM,测试一般加载指令的实现,加入特殊加载存储指令. 探讨由于加载指令引起的load相关问题,给出OpenMIPS的解决方法,验证解决效果. 加载存储 ...
- 自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)
将陆续上传新书<自己动手写CPU>,今天是第38篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发 ...
- 自己动手写CPU(11)——加载存储指令说明
加载存储指令说明 加载指令(7) lb.lbu.lh.lhu.lw.lwl.lwr 存储指令(5) sb.sh.sw.swl.swr 补充 加载指令(7) lb.lbu.lh.lhu.lw.lwl.l ...
- ARM汇编加载/存储指令
用在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器:存储指令则是完成相反操作.
- ARM汇编:加载和存储指令集(六大类)---LDR(ADR)、LDRB、LDRH、STR、STRB、STRH
ARM的六大类指令集---LDR.LDRB.LDRH.STR.STRB.STRH ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则 ...
- 单寄存器加载与存储指令
这种指令用于把单一的数 传入或者传出一个寄存器.支持的数据类型有字(32 位 ) .半字(16 位) 和字节.常用的单寄存器加载与存储指令包括: LDR/STR 字数据加载/ ...
最新文章
- 【算力大放送2】GPU 专属服务器使用教程!!!
- VAE--就是AutoEncoder的编码输出服从正态分布
- Android keymaster4.0- device集成笔记
- 《TensorFlow 机器学习方案手册》(附 pdf 和完整代码)
- android之PackageManager简单介绍
- 【mark】linux 终端命令行下的快捷键(自己已验证所有)
- 取0-1中间任意数java_java – 找到一个整数n 0,其中包含以下三个条件
- android 车辆轨迹,Android自定义view实现车载可调整轨迹线
- maven添加本地包命令mvn install:install-file
- Kaggle泰坦尼克数据科学解决方案
- RocketMQ Message hasn‘t been sent. Caused by No route info of this topic, Pr
- 预防AD对象被误删除
- 控件多线程访问的问题
- ENVI5.1裁剪影像及注意要点(如无论规则或是不规则裁剪结果都是矩形的问题求解)
- oracle18c 配置,0报错!Oracle 18C 完全安装指南及常见问题汇总
- win10下pyt3.7安装scrapy后cmd运行相关命令SyntaxError: invalid syntax 解决办法
- 微信好友只有昵称没有微信号_只知道昵称怎么查他的微信号
- Python写网络爬虫(三)
- linux 离线地图开发包,Mapbox本地离线部署
- RemoteViews的用法
热门文章
- java csrf_java使用jsp servlet来防止csrf 攻击的实现方法
- ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
- EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模
- 【UOJ34】—多项式乘法(FFT)
- [转] CSS 颜色名
- pyhton (一)基础
- UNITY把3D模型显示在UI层级上的思路
- HDU2199,HDU2899,HDU1969,HDU2141--(简单二分)
- Html中元素的分类
- zoj 3351 Bloodsucker(概率 dp)