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. ...
随机推荐
- Golang学习 - unicode/utf16 包
------------------------------------------------------------ // IsSurrogate 判断 r 是否为代理区字符 // 两个代理区字符 ...
- sort() 方法用于对数组的元素进行排序
语法 arrayObject.sort(sortby) 参数 描述 sortby 可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意,数组在原数组上进行排序,不生成副本. 说明 如果调用该 ...
- Javascript教程:AngularJS的五个超酷特性
AngularJS是一个超棒的javascript框架,不单单对于开发人员来说非常有吸引力,对于UI设计师来说也同样出色.在这篇教程中,我们将简单的介绍AngularJS几个重量级必备特性,并且介绍它 ...
- C. Ilya and Sticks
C. Ilya and Sticks time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 日本电商Rakuten:最凶猛的国际扩张者
这是普及社(puji-she)第五篇关于电商开放平台的文章,今天关注日本的Rakuten,它是一家综合性的企业,核心业务包括电子商务.旅游.信用 及支付.金融证券.新闻门户等.本文关注Rakuten的 ...
- ios----protocol, optional ,delegate
ios----protocol,delegate protocol——协议 协议是用来定义对象的属性,行为和用于回调的. 协议中有两个关键字@private和@optional,@privat ...
- [super dealloc]内存释放的先后顺序
心得:从前做内存释放,只是觉得应该,没体会到这个的重要性,如果不及时释放就会有很多内存泄露,就像我早期遇到的前赴后继的崩溃,比如:没使用完,就释放会崩溃等明显的release问题. 作为全局的 ...
- 通过 CALayer 代理方法绘图
#import "ViewController.h" #define WIDTH 50 #define PHOTO_HEIGHT 150 @interface ViewContro ...
- Pull解析-解析xml文件
首先需要导入jar包:kxml2-2.2.2.jar 例程: main: /** * pull解析 * * @author my * */ public class DemoParserStudent ...
- 重构6-Push Down Field(字段下移)
与上移字段相反的重构是下移字段.同样,这也是一个无需多言的简单重构. public abstract class Task { protected String _resolution; } publ ...