ARM寄存器的8种寻址方式01
一、立即数寻址
操作数由指令本身给出
MOV r0,#0x0F //是所有寻址方式里面速度最快的,但是受到合法立即数的限制
立即数要求以#和$开头
十六进制,#后跟0x;十进制,#后直接加;八进制,#后跟0;二进制,#后跟0b
什么是合法立即数?ARM中要求立即数是一个8位的常数循环左移偶数位得到的数值。也就是说只要是在0x00~0xFF中的一个数,或者是在这个区间中的一个数循环左移偶数位的数值,都是合法立即数。
给大家一个快速判断方法:
1、如果该数在0x00~0xFF之间,它是一个合法立即数;
2、如果该数>0xFF,先把它换算成十进制数,如果能被4整除,它就是一个合法立即数,否则是一个非法立即数。
二、寄存器寻址
利用寄存器中的数值作为操作数进行操作
ADD r0,r1,r2
MOV r0,r1
是速度仅次于立即数寻址的操作。
三、寄存器移位寻址
操作数由寄存器中的数值移位得到,移位的方式由助记符的形式给出,移位数可以是一个立即数也可以是一个寄存器数值
MOV r1,#7
MOV r2,#1
MOV r0,r1,r2,LSL #2
四、寄存器间接寻址
把寄存器中的值当做是被操作的数值在存储器中的地址,操作数本身放在寄存器中。
LDR r0,[r1]
STR r0,[r1]
实验验证:

执行第一条指令(MOV r1,0x35000)后寄存器的状态值

当前内存状态

执行第二条指令(LDR r0,[r1])后寄存器状态

可以看到r0寄存器的值已经变成上面内存地址为0x35000处内存的内容了。由于内存中数据的存储是有大小端问题的,所以看上去不一样实际是一样的值。

此时寄存器状态

r0保存着地址为0x35000的存储器中的数值,r1立即数赋值0x35000,r2立即数赋值0x34000。
此时内存状态


STR r0,[r2]指令执行完之后,0x34000处状态

该处值已经修改为寄存器r0的值。
LDR和STR指令说明:
LDR 目的寄存器,【存储器地址】
用于从存储器地址处获取一个32位的数据送至目的寄存器,当程序计数器PC被当做目的寄存器时,存储器中取到的数据被当做跳转的目的地址来使用,从而实现程序的跳转。
STR 源寄存器,【存储器地址】
用于将源寄存器中的数据送入存储器地址处。
ARM寄存器的8种寻址方式01的更多相关文章
- ARM的九种寻址方式
文章目录 1.立即数寻址 2.寄存器寻址 3.寄存器间接寻址 4.寄存器偏移寻址 5.寄存器基址变址寻址 6.批量寄存器寻址 7.相对寻址 8.堆栈寻址 9.块拷贝寻址 寻址方式就是CPU根据指令中的 ...
- 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)
: 12MHz 晶振 对应 405 ~ 532 MHz 处理速度; -- : 16K 指令缓存, 16K 数据缓存; -- : 32KB 指令缓存, 32KB 数据缓存; (3) 内存接口对比 : 提 ...
- Arm寄存器介绍及汇编基础
一.ARM处理器支持7种工作模式 ① 用户模式(USR): 用于正常执行程序(The normal ARM program execution state) ② 快速中断模式(FIQ): 用于高速数据 ...
- ARM寄存器学习,王明学learn
ARM寄存器学习 ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器.但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式. ...
- ARM体系的7种工作模式
一.ARM体系的CPU有以下7种工作模式: 用户模式(usr) 大多数程序运行于用户模式 特权模式 系统模式(sys) 运行具有特权的操作系统任务 异常模式 中断模式(irq) ...
- ARM寄存器介绍
ARM处理器共有37个寄存器.其中包括:31个通用寄存器,包括程序计数器(PC)在内.这些寄存器都是32位寄存器.以及6个32位状态寄存器.但目前只使用了其中12位.ARM处理器共有7种不同的处理器模 ...
- X86主要的几种寻址方式
一.首先 P33: 严格来说有三种寻址方式 与数据有关的寻址方式 与转移指令或过程调用指令有关的寻址方式 与IO指令有关的寻址方式 这篇博客只讲1.2两条 二.然后 1. 与数据有关的寻址方式 数据, ...
- ARM 寄存器
ARM总共有37个寄存器 ARM寄存器物理分类 通用寄存器:1:不分组寄存器(R0--R7) 2:分组寄存器(R8-R14) 3:程序计数器(R15)(注意:又名pc指针) 程序状态寄存器:1:CPS ...
- ARM寄存器总结:
ARM有16个32位的寄存器(r0到r15). r15充当程序寄存器PC,r14(link register)存储子程序的返回地址,r13存储的是堆栈地址. ARM有一个当前程序状态寄存器:CPSR. ...
随机推荐
- 剑指 offer set 4 矩形覆盖
总结 1. 斐波那契数列的变形题, 但是稍有隐晦, 有点意思 2. 求解 f(3) 时, 最后一块矩形可以竖着放, 也可以两块矩形横着放, 分别对应于 f(2) 和 f(1) ------------ ...
- Javascript禁止子元素继承父元素的事件
3种方法1.在父元素事件的function中加if(event.target==this){ }2.子元素事件function最后加event.stopPropgation():// 阻止事件冒泡3. ...
- 高效编程之cache命中对于程序性能的影响
下面这个代码用两个双层循环遍历了一个二维数组里所有的元素,以我自己机器的测试 上面那个循环耗时基本为下面的一半,两个循环的时间复杂度相同,为什么会有这么大的差别? 首先要明白的是不管是几维数组,他们都 ...
- Plugin with data access
In this tutorial I'll be using the nopCommerce plugin architecture to implement a product view track ...
- C#求所有可能的排列组合
static System.Collections.Specialized.StringCollection MakeStrings(string[] characters, int finalStr ...
- AngularJS特性
如果你不熟悉什么是Angular.js的话,小编我强烈推荐你阅读 Javascript教程:AngularJS的五个超酷特性.简单来说Angular.js是google开发者设计和开发的一套前端开发框 ...
- 整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK
Unity导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础. win7 下配置java环境变量,下面是链接 http://www.cnbl ...
- Java学习笔记——内部类及其调用方法
一.static内部类的static方法 public class Test0719_Inner_Test { public static void main(String[] args) { //s ...
- 常用排序算法之JavaScript实现
1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从 后向前扫描,找到相应位置并插入 ...
- 【AR】Vuforia App key is missing.Please get a valid key
在跑Vuforia 的sample android app 的时候报了下面这个错,找了半天才找到解决方法: "Vuforia App key is missing. Please get a ...