六、ARM 寻址方式
寻址方式是针对源操作数来说的
6.1 立即数寻址
- 源操作数是立即数
- 立即数:操作码以 # 号开头的数字为立即数
- 立即数寻址: MOV R0, #0x300
- 伪指令: LDR R0,=0x12345678
- 注意:
- 立即数是 8 位数据存储,用 X 表示(0~255),4 位存移位的次数,用 Y 表示(0~15),立即数 = X 循环右移 2 * Y 个位
- 立即数 0xf200 是由 0xcf2 间接表示的,即是由 8 位的 F2 循环右移 24 位(2 * 12)得到 X = 0xf2; Y = 0xC
6.2 寄存器寻址
- MOV R0,R1
- 源操作数是 寄存器
6.3 寄存器移位寻址
- 将寄存器寻址的源操作数进行移位
- MOV R0, R2, LSL, #3
- 将 R2 左移 3 位后,赋值给 R0
6.4 寄存器间接寻址
- ARM 中由 L/S 结构,即 load/store
- LOAD 是将内存的数据载入到寄存器中
- STROE 是将寄存器中的数据存储到内存中
- 指令:
- LDR R0,{R1} 把 {R1} 中的值取出来放入到 R0 中
- STR R0,{R1} 把 R0 中的值取出来放入到 R1 中
- {R1} 表示取 R1 存放的地址中的数据,换成 C 语言,即 *R1
MOV R1, #0x40000000
LDR R0, {R1}
STR R0, {R1} //若 R1 中的数据 0x40000000 所代表的数据是 0x55,则 R0 的值为 0x55
6.5 基址变址寻址
- MOV R0, #44
- MOV R1, #0x40000008
- STR R0, [R1, #-4]
- [R1, #-4] 的意思是将 R1 存储的地址值 - 4
- #-4 表示偏移量
- STR R0, [R1, #-4]!
- ! 表示回写,即 C 语言中的 i--,上一句则先把 R1 的地址值赋值到 R0 中,再将 R0 中的值 - 4
- 上一句相当于 STR R0,[R1], #-4
6.6 多寄存器寻址
- STMIA R0!, {R1 - R3, R5}
- 将 R1 R2 R3 R5 中的值,存放在以 R0 为起使的地址空间中
- 大括号中的内容表示寄存器中的值,R0 对应的是存储器的地址
- STM: 操作多个存储器的值
- 对应的命令是 LDMIA
- I/D(increase/decrease) A/B(after/before)

6.7 堆栈寻址
- 进行栈的操作,栈的寄存器是 R13,即 SP 寄存器
- STMFD SP!, {R1-R3} 压栈,寄存器号大的先入栈,与书写顺序没关系
- LDMFD SP!, {R1-R3} 出栈
- 一般都写成 FD,因为 ARM 的地址空间是满递减的
- 满堆栈:堆栈指针指向最后压入的有效数据项
- 空堆栈:堆栈指针指向下一个待压入数据的空位置
- MOV SP, #0x40000010
- STMFD SP!, {R1-R4}
- 即将 R4 R3 R2 R1 的值存入 0x4000000c 0x40000008 0x40000004 0x40000000
组合: F(FULL)/E(EMPTY) I/D
6.8 相对寻址
- 51 中用的 jmp 和 call 指令
- 相对寻址就是一个跳转,相对寻址是相对于 PC 而言的,跳转指令:B BL BLX BX
- B:跳转指令
- BL:带返回的跳转指令
- BLX:带返回和状态切换的跳转指令
- BX:带状态切换的跳转指令
六、ARM 寻址方式的更多相关文章
- ARM寻址方式,王明学learn
ARM寻址方式 所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式. 一.立即数寻址 立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数.这个操 ...
- 2.4 ARM寻址方式
所谓的寻址方式就是处理器指令中给出的信息来找到指令所需要的操作数的方式 1. 立即数寻址 立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即 ...
- ARM寻址方式
寻址方式: 所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式. 1.立即数寻址 2.寄存器寻址 3.寄存器间接寻址 就是寄存器中存放的是操作数在内存中的地址 例如以下指令: LDR ...
- (六)ARM状态寄存器-PSR
ARM程序状态寄存器Program State Register 在ARM模式中, 有16个数据寄存器和1或2个状态寄存器是可以随时访问的.在特权模式 (privileged mode) 下, 对应的 ...
- ARM 寻址方式
寻址方式有 9种 1.寄存器 2.立即数 3.寄存器位移 4.寄存器间接 5.基址 6.多寄存器 7.堆栈 8.块拷贝 9.相对 1. MOV R1,R2 R1 = R2 2. MOV R0,#0x1 ...
- [国嵌笔记][023][ARM寻址方式]
寻找方式 1.处理器根据指令中给出的信息来找到指令所需操作数的方式 2.立即数寻址 操作数本身在指令中给出,立即数前加”#”表示立即数寻址,操作数在指令中 3.寄存器寻址 利用寄存器中的数值作为操作数 ...
- 【嵌入式开发】ARM 芯片简介 (ARM芯片类型 | ARM处理器工作模式 | ARM 寄存器 | ARM 寻址)
: 12MHz 晶振 对应 405 ~ 532 MHz 处理速度; -- : 16K 指令缓存, 16K 数据缓存; -- : 32KB 指令缓存, 32KB 数据缓存; (3) 内存接口对比 : 提 ...
- ARM汇编语言
---恢复内容开始--- arm汇编语言 汇编语言是一种程序设计语言,arm处理器是一种16/32位的嵌入式RISC微处理器.一开始我把这混为一谈了.ARM汇编的特点:汇编语言,又叫助记符语言. 1) ...
- Arm寄存器介绍及汇编基础
一.ARM处理器支持7种工作模式 ① 用户模式(USR): 用于正常执行程序(The normal ARM program execution state) ② 快速中断模式(FIQ): 用于高速数据 ...
随机推荐
- libusb开发者指南
本文档描述libusb的API,以及如何开发USB应用.1 介绍 1.1 概览本文档描述libusb-0.1的API和USB相关内容.1.2 当前OS支持Linux 2.2或以上FreeBSD/N ...
- Visual Studio Code - 代码提示使用 webpack alias 的模块
使用 PathIntellisense 还是使用jsconfig.json? 使用 PathIntellisense 只能提示模块路径,并无法让 vs code 的 Intellisense 知道这个 ...
- pwa 总结
概述 前几天了解并按照官方文档,成功实现了一个小型的 pwa demo,现在把总结记录下来,供以后开发时参考,相信对其他人也有用. pwa pwa 包括很多内容,我这里只介绍一部分,因为比如 Push ...
- 把自己活成AI
干啥都失败,所以从0重新开始. 把自己活成AI 准则1:一件事的对错,只代表这件事本身.多一点的解释都是错误. 准则2:大多数人默认遵守的就是规则和法律.大多数人默认承认的就是道德. 然后取其和法律的 ...
- linux/linux学习笔记-vim文本编辑器(mooc)
vim文本编辑器 vim与vi的区别:( vim=vi +IMproved) VIM是一个Unix以及类unix文本编辑器 特点:功能强大,高度可定制 vim编辑器的三种模式:一般模式.编辑模式和命令 ...
- 为什么存储过程比sql语句效率高?
存储过程经过预编译处理 而SQL查询没有 SQL语句需要先被数据库引擎处理成低级的指令 然后才执行 -------------------------------------------------- ...
- window 下python2.7与python3.5两版本共存设置
分别下载两个版本的Python,安装. (1)在Path环境变量中检查以下4个变量(Path中的环境变量是以分号隔开的): 1.c:\Python27 2.c:\Python27\Scripts 3. ...
- Java第三周课程总结&实验报告一
第三周课程总结 1.关于面向对象的一些具体内容,明白了类与对象以及Java的封装性和构造方法以及对对象匿名的相关知识. 2.this关键字,它是表示类的成员属性(变量),使用this构造方法时必须放在 ...
- AngularJS——基础小知识(一)
$time0ut :定时器 $rootscope :全局的 $scope : 局部的作用域: 它下面的方法: $scope.$watch $scope.$apply 1)$scope.$wat ...
- MySQL-快速入门(14)MySQL性能优化
1.MySQL性能优化包括查询速度优化.数据库结构优化.数据库服务器优化等. 优化的切入点:合理的结构设计.表结构.索引.查询语句. 2.show status查询数据库的性能参数 show stat ...