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多寄存器加载/存储指令相关推荐

  1. ARM的批量加载/存储指令

    批量加载/存储指令格式: LDMXX|STMXX{条件符}{寻址模式}Rb{!},{寄存器列表} 其中XX表示IA/IB/DA/DB. LDMIA/STMIA    访问/存储后地址递增(Increm ...

  2. 自己动手写CPU(8)加载存储指令的实现

    自己动手写CPU(8)加载存储指令的实现 好久没更新blog了,暑假提前放了.现在收假也该收收心了,继续捡起之前的CPU,自己开的坑不管咋样把它填完吧. 指令介绍 1.加载指令 2.存储指令 修改系统 ...

  3. 【五级流水线CPU】—— 6. 加载存储指令(14)

    文章目录 1. 初步 12条 1.1 分析 1.2 添加数据存储器RAM 1.3 修改最小SOPC 2.3 测试9 加载存储指令 2. load-use数据冒险 测试10 load-use数据冒险的解 ...

  4. 【自己动手写CPU】加载存储指令的实现

    目标 修改之前一直做测试的sopc,为其添加数据RAM,测试一般加载指令的实现,加入特殊加载存储指令. 探讨由于加载指令引起的load相关问题,给出OpenMIPS的解决方法,验证解决效果. 加载存储 ...

  5. 自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)

    将陆续上传新书<自己动手写CPU>,今天是第38篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发 ...

  6. 自己动手写CPU(11)——加载存储指令说明

    加载存储指令说明 加载指令(7) lb.lbu.lh.lhu.lw.lwl.lwr 存储指令(5) sb.sh.sw.swl.swr 补充 加载指令(7) lb.lbu.lh.lhu.lw.lwl.l ...

  7. ARM汇编加载/存储指令

    用在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器:存储指令则是完成相反操作.

  8. ARM汇编:加载和存储指令集(六大类)---LDR(ADR)、LDRB、LDRH、STR、STRB、STRH

    ARM的六大类指令集---LDR.LDRB.LDRH.STR.STRB.STRH ARM微处理器支持加载/存储指令用于在寄存器和存储器之间传送数据,加载指令用于将存储器中的数据传送到寄存器,存储指令则 ...

  9. 单寄存器加载与存储指令

    这种指令用于把单一的数  传入或者传出一个寄存器.支持的数据类型有字(32 位 ) .半字(16 位)  和字节.常用的单寄存器加载与存储指令包括: LDR/STR            字数据加载/ ...

最新文章

  1. 【算力大放送2】GPU 专属服务器使用教程!!!
  2. VAE--就是AutoEncoder的编码输出服从正态分布
  3. Android keymaster4.0- device集成笔记
  4. 《TensorFlow 机器学习方案手册》(附 pdf 和完整代码)
  5. android之PackageManager简单介绍
  6. 【mark】linux 终端命令行下的快捷键(自己已验证所有)
  7. 取0-1中间任意数java_java – 找到一个整数n 0,其中包含以下三个条件
  8. android 车辆轨迹,Android自定义view实现车载可调整轨迹线
  9. maven添加本地包命令mvn install:install-file
  10. Kaggle泰坦尼克数据科学解决方案
  11. RocketMQ Message hasn‘t been sent. Caused by No route info of this topic, Pr
  12. 预防AD对象被误删除
  13. 控件多线程访问的问题
  14. ENVI5.1裁剪影像及注意要点(如无论规则或是不规则裁剪结果都是矩形的问题求解)
  15. oracle18c 配置,0报错!Oracle 18C 完全安装指南及常见问题汇总
  16. win10下pyt3.7安装scrapy后cmd运行相关命令SyntaxError: invalid syntax 解决办法
  17. 微信好友只有昵称没有微信号_只知道昵称怎么查他的微信号
  18. Python写网络爬虫(三)
  19. linux 离线地图开发包,Mapbox本地离线部署
  20. RemoteViews的用法

热门文章

  1. java csrf_java使用jsp servlet来防止csrf 攻击的实现方法
  2. ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  3. EL之GB(GBM):利用GB对回归(性别属性编码+调2参)问题(整数值年龄预测)建模
  4. 【UOJ34】—多项式乘法(FFT)
  5. [转] CSS 颜色名
  6. pyhton (一)基础
  7. UNITY把3D模型显示在UI层级上的思路
  8. HDU2199,HDU2899,HDU1969,HDU2141--(简单二分)
  9. Html中元素的分类
  10. zoj 3351 Bloodsucker(概率 dp)