ARM处理器支持9中不同的寻址方式。
1、移位寄存器寻址:
有5种移位方式:
LSL:逻辑左移。最低位用0补充,且移出的最后一位存放在cpsr中的C位中。
LSR:逻辑右移。最高位用0补充,且移出的最后一位存放在cpsr中的C位中。
ASR:算术右移。最高位用符号位补充,且移出的最后一位存放在cpsr中的C位中。
ROR:循环右移(不涉及到CPSR中的C位的循环右移)。且移出的最后一位存放在cpsr中的C位。
RRX:扩展循环右移(带有C位的右移)。只循环右移一位,且最高位用cpsr中的C位补充,移出的位存放在C位中。(先将C位补充到最高位,然后将移出的最低位放进C位中)
注意:如果指令中没有带上s后缀,那么移出的最后一位是不会写进到C中,也就是不会修改CPSR状态位。
2、寄存器间接寻址:
51单片机中间接寻址使用的是@符号,ARM中使用的是[]符号,表示间接寻址。
3、变址寻址:
变址寻址分为前索引寻址和后索引寻址。
LDR r0, [r1, #0x2]
这种属于前索引寻址,先计算r1+2的值,然后操作以此为地址的内存单元,指令完成后,r1的值是不变的。
LDR r0, [r1], #0x2
属于后索引寻址,先操作以r1为地址的内存单元,然后再将r1更新为r1+2。
4、多寄存器寻址:
只适用于STM和LDM这两条指令。这是ARM中特有的寻址方式,可以用来批量操作内存单元,从而提高效率。
在多寄存器寻址方式中,在{}中寄存器的编号是从小到大排列的。且在存储的时候是按照编号小的寄存器对应于低地址的存储器的规则。
5、堆栈寻址:(和STM和LDM指令一起用)
时间: 2024-10-24 10:33:29