7种寻址方式

1. 立即寻址

立即寻址也叫立即数寻址,操作数本身就在指令中给出,只要取出指令也就取到了操作数,这个操作数被称为立即数。立即数要求以 “#” 为前缀。

  • #0x1100:表示十六进制数
  • #0b1100:表示二进制数
  • #0d1100:表示十进制数

示例

ADD R0, R0, #1        ; R0 ← R0 + 1
ADD R0, R0, #0x3f     ; R0 ← R0 + 0x3f

2. 寄存器寻址

寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。

示例

ADD R0, R1, R2        ; R0 ← R1 + R2

3. 寄存器间接寻址

操作数本身存放在存储器中,存储器的地址是寄存器中的值。

示例

LDR R0, [R1]          ; R0 ← [R1]
STR R0, [R1]          ; [R1] ← R0

4. 基址加偏移寻址

将寄存器的内容与偏移量相加,得到一个操作数的地址,有以下几种模式:

前变址模式
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
基址加偏移寻址操作数的其它形式
LDR R0, [R1, #4]      ; R0 ← [R1 + 4]
LDR R0, [R1, R2]      ; R0 ← mem32[R1 + R2]
LDR R0, [R1, R2, LSL #2] ; R0 ← [R1 + R2 * 4]  注:先乘4再加R1

5. 堆栈寻址

满递增
STMFA SP!, {R0 - R7, LR}
空递增(Thumb - 2)
STMEA SP!, {R0 - R7, LR}
满递减(Thumb - 2)
STMFD SP!, {R0 - R7, LR}
空递减
STMED SP!, {R0 - R7, LR}

6. 块寻址

块寻址是多寄存器传送指令 LDM/STM 的寻址方式,可以将存储器中的一个数据块加载到多个寄存器中,也可以把多个寄存器的内容保存到存储器中。寻址中的寄存器是 R0 - R15 的子集。LDM/STM 指令的后缀名可以为:IA (Thumb - 2)、IB、DA、DB (Thumb - 2)。

示例

LDMIA R5!, {R0 - R4}
LDMDB R5!, {R0 - R4}

7. 相对寻址

相对寻址是基地址为 PC 的变址寻址。

示例

    BL SUBR         ; 转移到SUBR
                    ; 返回到此
SUBR                ; 子程序入口
    MOV PC, R14     ; 返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值