ARM处理器9种基本寻址方式.doc寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式, ARM处理器有
9种基本寻址方式。
•寄存器寻址
操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号, 寄存器的内容是操作数,
指令执行时直接取出寄存器值操作。
例如指令:
MOV R1,R2 ; R1— R2
SUB R0,R1,R2 ; RO— R1- R2
•立即寻址
在立即寻址指令中数据就包含在指令当中, 立即寻址指令的操作码字段后面的地址码部分就
是操作数本身,取出指令也就取出了可以立即使用的操作数 (也称为立即数)。立即数要以
为前缀,表示 16进制数值时以“ Ox”表示。
例如指令:
ADD RO,RO,#1 ; RO— R0 + 1
MOV RO,#OxffOO ; RO— OxffOO
•寄存器移位寻址
寄存器移位寻址是 ARM指令集特有的寻址方式。第2个寄存器操作数在与第 1个操作数结合
之前,先进行移位操作。
例如指令:
MOV R0,R2,LSL #3 ; R2的值左移 3位,结果放入 R0, 即卩R0=R2 * 8
ANDS R1,R1,R2,LSL R3 ; R2的值左移 R3位,然后和 R1相与操作,结果放入 R1 可采用的移位操作如下:
LSL:逻辑左移(Logical Shift Left ),寄存器中字的低端空出的位补 0。
LSR逻辑右移(Logical Shift Right ),寄存器中字的高端空出的位补 0。
ASR算术右移(Arithmetic Shift Right ),移位过程中保持符号位不变,即如果源操作
数为正数,则字的高端空出的位补 0,否则补1
ROR循环右移(Rotate Right ),由字的低端移出的位填入字的高端空出的位
RRX带扩展的循环右移( Rotate Right extended by 1 place ),操作数右移一位,高端空 出的位用原C标志值填充。
各移位操作过程如图所示。
BEQ LOOP ;条件跳转到LOOP标号处
< 0 LSL移位貴作
LSR移位操作
0 ► ► LSR移位操作
BEQ LOOP ;条件跳转到LOOP标号处
BEQ LOOP ;条件跳转到LOOP标号处
1
►
4
ASR移位妣fi
r
k I—.
' r
*1 1
KKa Wi n H
4•寄存器间接寻址
指令中的地址码给出的是一个通用寄存器编号, 所需要的操作数保存在寄存器指定地址的存
储单元中,即寄存器为操作数的地址指针,操作数存放在存储器中。
例如指令:
LDR R0,[R1] ; Rg[R1](将R1中的数值作为地址,取出此地址中的数据保存在 R0中)
STR R0,[R1] ; [R1] — R0
.变址寻址
变址寻址是将基址寄存器的内容与指令中给出的偏移量相加, 形成操作数的有效地址, 变址
寻址用于访问基址附近的存储单元,常用于查表,数组操作,功能部件寄存器访问等。
例如指令:
LDR R2,[R3,#4] ; R2— [R3 + 4](将 R3中的数值加 4作为地
址,取出此地址的数值保存在 R2
ARM处理器9种基本寻址方式 来自淘豆网www.taodocs.com转载请标明出处.