相关文章推荐
瘦瘦的柳树  ·  仿真在 ARM 上的工作原理 | ...·  1 月前    · 
温暖的海豚  ·  mysql联表更新group by 用法 ...·  1 年前    · 
想表白的水煮鱼  ·  在函数中需要用到大量参数时如何传参可以更简洁 ...·  2 年前    · 
打篮球的红酒  ·  全网最详细!Centos7.X ...·  2 年前    · 
深情的绿茶  ·  WPF ...·  2 年前    · 
Code  ›  嵌入式:ARM间接寻址、变址寻址与多寄存器寻址开发者社区
arm嵌入式 指令寄存器 嵌入式技术 arm
https://cloud.tencent.com/developer/article/2195093
不敢表白的沙滩裤
2 年前
作者头像
timerring
0 篇文章

嵌入式:ARM间接寻址、变址寻址与多寄存器寻址

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > TechBlog > 嵌入式:ARM间接寻址、变址寻址与多寄存器寻址

嵌入式:ARM间接寻址、变址寻址与多寄存器寻址

作者头像
timerring
发布 于 2022-12-19 08:22:08
377 0
发布 于 2022-12-19 08:22:08
举报

文章目录
  • 寄存器间接寻址
  • 基址加偏址寻址(变址寻址)
    • 偏移地址
    • 传送数据类型
  • 块拷贝寻址(多寄存器寻址)
    • 块拷贝寻址示例

寄存器间接寻址

寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:

 LDR	R0,[R1]		/*R0←[R1]*/
 STR	R0,[R1]		/*[R1]←R0*/

第一条指令将以R1的值为地址的存储器中的数据传送到R0中。第二条指令将R0的值传送到以R1的值为地址的存储器中。

ARM的数据传送指令都是基于寄存器间接寻址,即通过Load/Store完成对数据的传送操作。

基址加偏址寻址(变址寻址)

基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量(用12位表示,不超过4KB)相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。

变址寻址方式可以分为:前变址(Pre-indexed)、自动变址(Auto-indexed)和后变址(Post-indexed)。

前变址模式

LDR R0,[R1,#4] ;R0←[R1+4]

自动变址模式

LDR R0,[R1,#4]!	;R0←[R1+4]、R1←R1+4

后变址模式

LDR R0,[R1] ,#4	;R0←[R1]、R1←R1+4

偏移地址

地址偏移除了可以是一个12位的立即数,还可以是另一个寄存器,并且在加到基址寄存器之前还可以先经过移位操作,如:

  LDR R0,[R1,R2]		;R0←[R1+R2]
  LDR R0,[R1,R2,LSL #2]	;R0←[R1+R2*4]

传送数据类型

ARM处理器支持的传送数据类型可以是有符号和无符号的8位字节、16位半字、32位字,最高位表示符号位(正数为0,负数为1)。对于字节操作,在指令中增加了字母B,对于半字,在指令中增加了字母H进行标识。默认是字操作,不加数据类型标识。如:

LDRB R0,[R1]	;R0←mem8[R1], 加载8位字节数据到寄存器R0,零扩展到32位
 
推荐文章
瘦瘦的柳树  ·  仿真在 ARM 上的工作原理 | Microsoft Learn
1 月前
温暖的海豚  ·  mysql联表更新group by 用法 - CSDN文库
1 年前
想表白的水煮鱼  ·  在函数中需要用到大量参数时如何传参可以更简洁合理? - 知乎
2 年前
打篮球的红酒  ·  全网最详细!Centos7.X 搭建Grafana+Jmeter+Influxdb 性能实时监控平台 - 小菠萝测试笔记 - 博客园
2 年前
深情的绿茶  ·  WPF 线程操纵UI问题_51CTO博客_wpf 多线程
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号