ARM处理器寻址方式
寻址方式是处理器根据指令给出的地址码字段来寻找物理地址的方式。
1、立即寻址
立即寻址也称为立即数据寻址,在立即寻址中的操作码字段后面的地址码部分就是操作数据本身,在数据包含在指令当中,取出指令就取出了立即数。
ADD R0,R0,#1
MOV R0,#0X3FF
2、寄存器寻址
在寄存器寻址中,操作数的值在寄存器中,就是利用指令中的地址码字段指出的寄存器中的数值作为操作数,指令执行时直接取出寄存器值操作,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。
ADD R0,R1,R2
MOV R1,R2
ADD R0,R1,R2
MOV R1,R2
3、寄存器间接寻址
寄存器间接寻址指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数据地址指针。
SWP R1,R1,[R2]
ADD R0,R1,[R2]
LDR R0,[R1]
SWP R1,R1,[R2]
ADD R0,R1,[R2]
LDR R0,[R1]
4、寄存器偏移寻址
寄存器偏移寻址是ARM指令集特有的寻址方式,当第二操作数是寄存器偏移方式时,第二个寄存器操作数在第一个操作数结合前选择移位操作。
MOV R0,R2,LSL #3
ANDS R1,R1,R2,LSL R3
MOV R0,R2,LSL #3
ANDS R1,R1,R2,LSL R3
5、基址变址寻址
基址变址寻址就是将寄存器内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变地址方式常用于访问某基址附近的地址单元。
LDR R0,[R1,#0X0F]
LDR R0,[R1],#4
LDR R0,[R1,R2]
LDR R0,[R1,#0X0F]
LDR R0,[R1],#4
LDR R0,[R1,R2]
6、多寄存器寻址
多寄存器寻址就是一次可以传送几个寄存器的值,这种寻址方式可以用一条指令完成传送最多16个通用寄存器的值。
LDMIA R0,{R1,R2,R3,R4}
STMIA R0,{R3-R5,R10}
7、堆栈寻址
1、堆栈是一种数据结构,按先进后出的方式工作,使用一个称为堆指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。
2、当堆栈指针指向最后压入数据时,称为满堆栈,而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈,同时根据堆栈的生成方式,又可分为递增堆栈和递减堆栈。
3、当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址时,称为为递减堆栈。
4、ARM微处理器支持四种类型的堆栈工作方式:满增堆栈、满减堆栈,空增堆栈、空减堆栈。
LDMFD SP!,{R1-R7,LR}
STMFD SP!,{R1-R7,LR}
LDMFD SP!,{R1-R7,LR}
STMFD SP!,{R1-R7,LR}
原文地址:https://www.cnblogs.com/usingnamespace-caoliu/p/9691586.html