ARM处理器的寻址方式
- 立即寻址
MOV R0,#12345 @R0 = 12345
立即数以#开头,十六进制表示为 #0xFF
- 寄存器寻址
MOV R0,R1
-
寄存器移位寻址
LSL:逻辑左移,移动后寄存器空出低位补0
LSR:逻辑右移,移动后寄存器空出高位补0
ASR:算数右移, 移动过程中符号位不变,如果源操作数为整数,高位补0,负数高位补1.
ROR:循环右移,移位后低位填入高位
RRX:带扩展的循环右移,操作数右移一位,移位空出的高位用C标志的值来填充。
MOV R0,R1,LSL #2
@指令功能是将寄存器R1的值左移两位,再存入R0
- 寄存器间接寻址
LDR R0,[R1]
取出RI的存放的地址值,再取出地址值指向的内容放入R0,相当于C语言R0 = * R1
- 基址寻址
LDR R0,[R1,#-4]
同上,相当于C语言的 R0 = *(R1 - 4)
- 多寄存器寻址
LDMIA R0,{R1,R2,R3,R4}
作用:以此为R1~R4寄存器赋值,且没赋值一次,R0的值自增一个字(ARM一个字位32位),相当于
R1 = [R0],R2 = [R0+#4],R3 = [R0+#8],R4 = [R0+#12]
- 堆栈寻址
STMFD SP! , {R1-R7,LR} @将R1-R7,LR入栈,保存子程序现场
STMIA SP!, {R1-R3} @存储R1-R3寄存器的内存到R0寄存器指向的存储单元
LDM和STM为指令前缀,表示多寄存器寻址,FD,IA是指令后缀
- 块拷贝寻址
LDMIA R0!,{R1-R3} @从R0指向的存储单元中读取3个字到R1-R3寄存器
STMIA R0!,{R1-R3} @存储R1-R3的内容到R0寄存器指向的存储单元
- 相对寻址
BL NEXT
…………..
NEXT:
………….
好了,以上就是全部九钟ARM寻址方式,下一章:
ARM汇编语言学习笔记(三)—ARM汇编指令集与Thumb指令集