ARM汇编语言学习笔记(二)---ARM汇编的寻址方式

时间:2023-01-19 03:33:08

ARM处理器的寻址方式

  • 立即寻址
MOV R0#12345 @R0 = 12345

立即数以#开头,十六进制表示为 #0xFF

  • 寄存器寻址
MOV R0,R1
  • 寄存器移位寻址

    LSL:逻辑左移,移动后寄存器空出低位补0
    LSR:逻辑右移,移动后寄存器空出高位补0
    ASR:算数右移, 移动过程中符号位不变,如果源操作数为整数,高位补0,负数高位补1.
    ROR:循环右移,移位后低位填入高位
    RRX:带扩展的循环右移,操作数右移一位,移位空出的高位用C标志的值来填充。

MOV R0R1LSL #2
@指令功能是将寄存器R1的值左移两位,再存入R0
  • 寄存器间接寻址
  LDR R0,[R1]

取出RI的存放的地址值,再取出地址值指向的内容放入R0,相当于C语言R0 = * R1

  • 基址寻址
 LDR R0,[R1,#-4]

同上,相当于C语言的 R0 = *(R1 - 4)

  • 多寄存器寻址
LDMIA R0,{R1R2R3R4} 

作用:以此为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指令集