LDR 把一个字装入寄存器 Rd<-mem32[address]
STR 从一个寄存器保存一个字或者一个字节 Rd->mem32[address]
LDRB 把一个字节装入寄存器 Rd<-mem8[address]
STRB 从一个寄存器保存一个字节 Rd->mem8[address]
LDRH 把一个半字装入寄存器 Rd<-mem16[address]
STRH 从一个寄存器保存一个半字 Rd->mem16[address]
LDRSB 把一个有符号字节装入寄存器 Rd<-SignExtend(mem8[address])
LDRSH 把一个有符号半字装入寄存器 Rd<-SignExtend(mem16[address])
变址模式: 数据: 基址寄存器: 示例:
回写前变址 men[base+offset] 基址寄存器加上偏移 LDR r0,[r1,#4]!
前变址 men[base+offset] 不变 LDR r0,[r1,#4]
后变址 men[base] 基址寄存器加上偏移 LDR r0,[ri],#4
[注]示例中使用的"!"表示要把计算出的地址回写到基址寄存器.
回写前变址和前变址的区别是:回写型前变址在计算出新的地址后要用新的地址更新基址寄存器的内容,然后再用新的基址寄存器进行寻址;而前变址方式虽然也利用对基址寄存器的改变值进行寻址,但基址寄存器在操作之后仍然保持原值.
后变址和回写型前变址的区别是:两者都更新基址寄存器的内容,但后变址方式先利用基址寄存器的原值进行寻址操作,然后再更新基址寄存器.
LDM 装载多个寄存器 {Rd}*N <- mem32[start address + 4 * N] optional Rn updated
STM 保存多个寄存器 {Rd}*N -> mem32[start address + 4 * N] optional Rn updated
寻址模式: 描述: 起始地址: 结束地址: Rn!
IA 执行后增加 Rn Rn+4*N-4 Rn+4*N
IB 执行前增加 Rn+4 Rn+4*N Rn+4*N
DA 执行后减少 Rn-4*N+4 Rn Rn-4*N
DB 执行前减少 Rn-4*N Rn-4 Rn-4*N