ARM基础学习-寄存器寻址方式和指令

本文详细介绍了ARM处理器的寻址方式,包括立即数、寄存器、寄存器移位、寄存器间接、基址变址、多寄存器和相对寻址。此外,还讲解了ARM指令的分类,如跳转、数据处理、状态寄存器访问、内存访问、批处理Load/Store、信号量操作和异常中断产生指令。通过对这些基础知识的学习,有助于理解ARM架构和程序设计。
摘要由CSDN通过智能技术生成

寻址方式

数据都存在存储器中,寻址简单地说就是找到存储数据或指令的地址。存储器有很多存储单元,用于存储数据。或者说,寻址就是读取数据所在储存装置中对应地址编号中存储的内容;寻址方式是指某一个CPU指令系统中规定的寻找操作数所在地址的方式,或者说通过什么的方式找到操作数。寻址方式的方便与快捷是衡量CPU性能的一个重要方面.

1.立即数寻址:
操作数在指令中,如: ADD R0,R0,#10 —->R0 = R0 + 10

2.寄存器寻址:
利用寄存器中的值作为操作数,如:ADD R0,R1,R2 —->R0 = R 1 + R 2

3.寄存器移位寻址:
寄存器中的值移位后得到操作数,用到桶形移位器
介绍一下桶形移位器:
LSL:(逻辑左移),相当于无符号数x2;
ASR: (算术右移),相当于带符号的数除2;
LSR: (逻辑右移),相当于无符号数除2;
ROR:(循环右移),相当于位轮换;
RRX:(带扩展的循环右移),位轮换,从CF到MSB都参与;
如:ADD R0,R1,R2,LSL #2 ——–>R0 = R1 + R2<<2;

4.寄存器间接寻址:
寄存器中的值作为操作数的地址,操作数本身放在存储器中;
如:LDR R0,【R1】 —->R0 = 【R1】,取出R1存的地址中的值,赋给R0;

5.基址变址寻址:
基址寄存器的内容与指令中的偏移量相加,得到有效操作数的地址,然后访问该地址空间;
分三种:
1)、前索引:
如:LDR R0,【R1,#4】 —>R1存的地址+4,访问新地址里面的值,放到R0;
2)、自动索引:
如:LDR R0, 【R1,#4】! —>在前索引的基础上,新地址回写进R1;注:!表示回写地址:R1的存储地址在原来基础上加4;
3)、后索引:
如:LDR R0 【R1】,#4 —>R1存的地址的内容写进R0,R1存的地址+4再写进R1;

6.多寄存器寻址:
一条指令完成多个寄存器的传送,最多16个寄存器;
如:STMxx R0!,{R1-R5}
注:xx是IDAB的任意组合:I-增;D-减;A-后;B-先;
执行这类指令要考虑如下几个问题:
1)、基址寄存器指向原始地址有没有放一个有效值?
2)、寄存器列表哪个寄存器被最先传送?
3)、存储器地址增长方向?
4)、指令执行完成后,基址寄存器有没有指向一个有效值?
如:STMIA R0!,{R1-R5} 的答案分别是:有;R1;低-高;没有。
为什么要考虑这么多,因为涉及到数据还原的问题;
如:STMIB r0!,[r1-r5] <

  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值