ARM 指令中的寻址方式

本文详细介绍了ARM指令集中的7种寻址方式,包括立即数寻址、寄存器寻址、寄存器间接寻址、寄存器偏移寻址、寄存器基址变址寻址、多寄存器寻址和堆栈寻址。每种寻址方式都有详细的解释和示例,帮助读者深入理解ARM指令的执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ARM 指令中的寻址方式分为下面7 中:

  1. 立即数寻址
  2. 寄存器寻址
  3. 寄存器间接寻址
  4. 寄存器偏移寻址
  5. 寄存器基址变址寻址
  6. 多寄存器寻址
  7. 堆栈寻址

1、立即数寻址

也叫立即寻址,是一种特殊的寻址方式,操作数本身包含在指令中,只要取出指令也就取到了操作数。这个操作数叫做立即数,对应的寻址方式叫做立即寻址。
例如:
MOV R0,#64 ;R0 ← 64

2、寄存器寻址

寄存器寻址就是利用寄存器中的数值作为操作数,也称为寄存器直接寻址。
例如:
ADD R0,R1, R2 ;R0 ← R1 + R2

3、 寄存器间接寻址

寄存器间接寻址就是把寄存器中的值作为地址,再通过这个地址去取得操作数,操作数本身存放在存储器中。
例如:
LDR R0,[R1] ;R0 ←[R1]

4、寄存器偏移寻址

这是ARM指令集特有的寻址方式,它是在寄存器寻址得到操作数后再进行移位操作,得到最终的操作数。
例如:
MOV R0,R2,LSL #3 ;R0 ← R2 * 8 ,R2的值左移3位,结果赋给R0。

5、寄存器基址变址寻址

寄存器基址变址寻址又称为基址变址寻址,它是在寄存器间接寻址的基础上扩展来的。它将寄存器(该寄存器一般称作基址寄存器)中的值与指令中给出的地址偏移量相加,从而得到一个地址,通过这个地址取得操作数。
例如:
LDR R0,[R1,#4] ;R0 ←[R1 + 4],将R1的内容加上4形成操作数的地址,取得的操作数存入寄存器R0中。

6、多寄存器寻址

这种寻址方式可以一次完成多个寄存器值的传送。
例如:
LDMIA R0,{R1,R2,R3,R4} ;R1←[R0],R2←[R0+4],R3←[R0+8],R4←[R0+12]

7、堆栈寻址

堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使用堆栈指针(Stack Pointer, SP)指示当前的操作位置,堆栈指针总是指向栈顶。
例如:
STMFD SP!,{R1-R7, LR} ;将R1-R7, LR压入堆栈。满递减堆栈。
LDMED SP!,{R1-R7, LR} ;将堆栈中的数据取回到R1-R7, LR寄存器。空递减堆栈。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿雷由

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值