ARM 寻址方式(处理器根据指令信息找到操作数的方式)
- 1、立即数寻址( 操作数直接在指令中 mov R1,#3:将3放到R0)
- 2、寄存器寻址 ( 操作数放在寄存器中 mov R0,R1:将R0的值放到R1中)
- 3、寄存器间接寻址
(操作数在寄存器值为地址指向的内存中 mov R0,[R2]:将R2中的值为地址指向内存中的数放到R0中) - 4、寄存器位移寻址
(当第二个数为位移方式时、将寄存器的值先位移处理得到操作数 mov R0,R1,lsl#3:将R1中值左移3位放到R0中) - 5、寄存器基址寻址(也叫基址变址寻址)
由间接寻址发展而来,先对寄存器中的值进行计算,再以结果为地址,取其指向内存值为操作数。
示例: LDR R0, [R1, #4]:先将R1中的值加4 然后以结果为地址 对应的内存操作数放到R0 - 6、多寄存器寻址
一条指令传送多个(最多16个)寄存器值
示例: STMIA R0!,{R2-R7,R12}:将 R2 到 R7 和 R12 放到 R0 指向的地址中 - 7、相对寻址
以程序计数器 PC 的当前值为基地址,指令中的地址标号作为偏移量,
将两者相加之后得到操作数的有效地址 BL NEXT:跳转到NEXT标签处 - 8、拷贝寻址。将连续的寄存器值进行操作。
STMIA R0! ,{R1-R7}:将R1~R7的数据保存到R0指向的地址中 - 9、堆栈寻址。将栈用于操作数保存或者导出的操作。
STMFD SP!,{R1-R7,LR}:将R1~R7,LR入栈,SP更新。满递减堆栈