微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM指令寻址方式之: 数据处理指令的寻址方式

ARM指令寻址方式之: 数据处理指令的寻址方式

时间:08-13 来源:3721RD 点击:

4.1 数据处理指令的寻址方式

4.1.1 数据处理指令的寻址方式概要

数据处理指令的基本语法格式如下。

<opcode> {<cond>} {S} <Rd>,<Rn>,<shifter_operand>

其中<shifter_operand>有下面11种形式,如表4.1所示。

表4.1 <shifter_operand>的寻址方式

语 法

寻 址 方 式

1

#<immediate>

立即数寻址

2

<Rm>

寄存器寻址

3

<Rm>, LSL #<shift_imm>

立即数逻辑左移

4

<Rm>, LSL <Rs>

寄存器逻辑左移

5

<Rm>, LSR #<shift_imm>

立即数逻辑右移

6

<Rm>, LSR <Rs>

寄存器逻辑右移

7

<Rm>, ASR #<shift_imm>

立即数算术右移

8

<Rm>, ASR <Rs>

寄存器算术右移

9

<Rm>, ROR #<shift_imm>

立即数循环右移

10

<Rm>, ROR <Rs>

寄存器循环右移

11

<Rm>, RRX

寄存器扩展循环右移

数据处理指令的寻址方式根据<shifter_operand>的不同,相应的分为11种。

4.1.2 指令解码

图4.1显示了数据处理指令不同寻址方式下的解码格式。

图4.1 数据操作指令编码格式

编码格式中各域含义如下。

· <opcode>:确定具体指令。

· S:标识指令是否影响程序状态寄存器CPSR条件标志。

· Rd:指令操作的目的寄存器。

· Rn:指令第一源操作数。

· bit[11∶0]:移位操作,详见本章移位操作一节。

· bit[25]:被用来区分是立即数移位操作还是寄存器移位操作。

如果指令编码出现下面情况:bit[25] = 0并且bit[4] = 1并且bit[7] = 1,则指令并非数据处理指令,它可能是Load/Store指令或算术指令。

4.1.3 移位操作

数据处理指令是在算术逻辑单元ALU中完成。ARM处理器一个显著特征就是可以在操作数进入ALU之前,对操作数进行指定位数的左移或右移操作。这种功能明显增强了数据处理操作的灵活性。

移位操作可能产生进位,更新程序状态寄存器CPSR的进位标志C。移位操作有下面3种基本方式。

1.立即数方式

没有任何一条ARM指令可以包含一个32位的立即数,数据处理指令编码格式中,第二个操作数有12位。指令的编码格式如图4.1所示。

指令中的立即数是由一个8 bit的常数移动4 bit偶数位(0,2,4,…,26,28,30)得到的。所以,每一条指令都包含一个8 bit的常数X和移位值Y,得到的立即数=X循环右移(2×Y)。

注意

8位立即数一定要移偶数位。

下面列举了一些有效的立即数。

0xFF、0x104、0xFF0、0x FF00、0x FF000、0x FF000000、0x F000000F

下面是一些无效的立即数。

0x101、0x102、0x FF1、0x FF04、0x FF003、0x FFFFFFFF、0x F000001F

下面是一些应用立即数的指令。

MOV r0,#0 ;送0到r0

ADD r3,r3,#1 ;r3的值加1

CMP r7,#1000 ;r7的值和1000比较

BIC r9,r8,#0x FF00 ;将r8中8~15位清零,结果保存在r9中

2.寄存器方式

寄存器的值可以被直接用于数据操作指令,如:

MOV r2,r0 ;r0的值送r2

ADD r4,r3,r2 ;r2加r3,结果送r4

CMP r7,r8 ;比较r7和r8的值

3.寄存器移位方式

寄存器的值在被送到ALU之前,可以事先经过桶形移位寄存器的处理。预处理和移位发生在同一周期内,所以有效的使用移位寄存器,可以增加代码的执行效率。

具体的移位(或者循环移位)方式有下面几种。

· ASR:算术右移。

· LSL:逻辑左移。

· LSR:逻辑右移。

· ROR:循环右移。

· RRX:扩展的循环右移。

以上5种移位方式,移位值均可以由立即数或寄存器指定。下面是一些在指令中使用了移位操作的例子。

ADD r2,r0,r1,LSR #5

MOV r1,r0,LSL #2

RSB r9,r5,r5,LSL #1

SUB r1,r2,r0,LSR #4

MOV r2,r

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top