新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM指令尋址方式之: 數據處理指令的尋址方式

        ARM指令尋址方式之: 數據處理指令的尋址方式

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257084.htm

        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>

        立即數循環(huán)右移

        10

        Rm>, ROR Rs>

        寄存器循環(huán)右移

        11

        Rm>, RRX

        寄存器擴展循環(huán)右移

        數據處理指令的尋址方式根據shifter_operand>的不同,相應的分為11種。

        4.1.2 指令

        圖4.1顯示了數據處理指令不同尋址方式下的格式。

        圖4.1 數據操作指令編碼格式

        編碼格式中各域含義如下。

        · opcode>:確定具體指令。

        · S:標識指令是否影響程序狀態(tài)寄存器CPSR條件標志。

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

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

        · bit[11∶0]:移位操作,詳見本章移位操作一節(jié)。

        · bit[25]:被用來區(qū)分是立即數移位操作還是寄存器移位操作。

        如果指令編碼出現下面情況:bit[25] = 0并且bit[4] = 1并且bit[7] = 1,則指令并非數據處理指令,它可能是Load/Store指令或算術指令。

        4.1.3 移位操作

        數據處理指令是在算術邏輯單元ALU中完成。處理器一個顯著特征就是可以在操作數進入ALU之前,對操作數進行指定位數的左移或右移操作。這種功能明顯增強了數據處理操作的靈活性。

        移位操作可能產生進位,更新程序狀態(tài)寄存器CPSR的進位標志C。移位操作有下面3種基本方式。

        1.立即數方式

        沒有任何一條指令可以包含一個32位的立即數,數據處理指令編碼格式中,第二個操作數有12位。指令的編碼格式如圖4.1所示。

        指令中的立即數是由一個8 bit的常數移動4 bit偶數位(0,2,4,…,26,28,30)得到的。所以,每一條指令都包含一個8 bit的常數X和移位值Y,得到的立即數=X循環(huán)右移(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中


        上一頁 1 2 3 4 5 6 7 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 青龙| 皮山县| 扬中市| 沙坪坝区| 嘉义市| 罗定市| 霸州市| 乐安县| 玉龙| 潍坊市| 邓州市| 内黄县| 林州市| 株洲县| 河南省| 城口县| 横峰县| 福清市| 三河市| 嘉义县| 类乌齐县| 泽库县| 盈江县| 郓城县| 河津市| 蒲江县| 万荣县| 浠水县| 左权县| 察雅县| 扬州市| 武定县| 交口县| 古田县| 赤水市| 甘德县| 墨脱县| 务川| 平谷区| 安西县| 林西县|