ARM数据处理指令寻址方式

分享到:
           

    ARM指令集可以分为跳转指令、数据处理指令、程序状态寄存器传输指令、Load/Store指令、协处理器指令和异常中断产生指令。根据使用的指令类型不同,指令的寻址方式分为数据处理指令寻址方式和内存访问指令寻址方式。本文主要介绍一下ARM数据处理指令寻址方式。

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

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

    其中,<shifter_operand>有11种形式,如表1-1所示。

表1-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 寄存器扩展循环右移

    数据处理指令寻址方式可以分为以下几种。

    (1)立即数寻址方式;
    (2)寄存器寻址方式;
    (3)寄存器移位寻址方式。

    1.立即数寻址方式

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


图1-1 立即数表示方法

    下面列举了一些有效的立即数:
    0xFF、0x104、0xFF0、0xFF00、0xFF000、0xFF000000、0xF000000F

    下面是一些无效的立即数:
    0x101、0x102、0xFF1、0xFF04、0xFF003、0xFFFFFFFF、0xF000001F

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

    MOV R0,#0             ;送0到R0
    ADD R3,R3,#1          ;R3的值加1
    CMP R7,#1000          ;R7的值和1000比较
    BIC R9,R8,#0xFF00     ;将R8中8~15位清零,结果保存在R9中

    2.寄存器寻址方式

    寄存器的值可以被直接用于数据操作指令,这种寻址方式是各类处理器经常采用的一种方式,也是一种执行效率较高的寻址方式,如:

    MOV R2,R0         ;R0的值送R2
    ADD R4,R3,R2       ;R2加R3,结果送R4
    CMP R7,R8         ;比较R7和R8的值

    3.寄存器移位寻址方式

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

    下面是一些在指令中使用了移位操作的例子:

    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,R4,ROR  R0

    华清远见课程推荐:ARM开发培训班(FSATC1001)本课程在涵盖了ARM公司授权培训课程全部内容基础上,结合项目实际,进一步增加了更多丰富的实用内容,例如ARM接口开发,从零编写bootloader引导Linux系统,大约占全部课程的40%内容,这些内容不仅为其他课程打下坚实基础,而且可以使学员具备更强的实际动手能力,更贴近企业用人需求。本课程的升级同时得到了ARM公司的首肯和大力支持。


   热点链接:

   1、ARM处理器是什么
   2、ARM Cortex A9处理器好吗

更多新闻>>