新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM指令尋址方式之: 內存訪問指令尋址

        ARM指令尋址方式之: 內存訪問指令尋址

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

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

        雜類Load/Store指令的解碼格式如圖4.23所示。

        圖4.23 雜類Load/Store指令解碼格式

        編碼格式中各標志位的含義如表4.5所示。

        表4.5 雜類Load/Store指令編碼格式各標志位含義

        位 標 識

        取 值

        含 義

        P

        P=0

        使用后索引尋址

        P=1

        使用偏移地址或前索引尋址(由W位決定)

        續表

        位 標 識

        取 值

        含 義

        U

        U=0

        訪問的地址=基址寄存器的值-偏移量(offset)

        U=1

        訪問的地址=基址寄存器的值+偏移量(offset)

        W

        W=0

        如果P=0,使用后索引尋址;P=1,指令不改變基址寄存器的值

        W=1

        如果P=0,未定義指令;如果P=1,將計算的內存訪問地址回寫到基址寄存器

        L

        L=0

        Store指令

        L=1

        Load指令

        S

        S=0

        無符號半字內存訪問

        S=1

        有符號半字內存訪問

        H

        H=0

        字節訪問

        H=1

        半字訪問

        注意

        當S=0并且H=0時,并非無符號的字節內存訪問指令。無符號的內存訪問指令不使用該種尋址方式,詳見本章上一節。

        當S=1并且L=0時,并非是有符號的存儲指令,而是未定義指令。指令并未區分有符號和無符號的字節和半字存儲。

        1.[Rn,#±offset_8>]

        (1)編碼格式

        指令的編碼格式如圖4.24所示。

        圖4.24 雜項內存訪問指令——立即數偏移尋址編碼格式

        內存訪問地址為基址寄存器Rn的值加(或減)立即數offset_8。

        編程中,在訪問結構體或記錄(record)類型的變量時,這些內存的操作指令是十分有效的。另外,在子程序中,也常用這些指令訪問本地變量和堆棧。當offset_8=0時,內存訪問地址即基址寄存器Rn的值。

        (2)

        LDR|STR{cond>}H|SH|SB|D Rd>,[Rn>,#±offset_12>]

        其中:

        · Rn為基址寄存器,該寄存器包含內存訪問的基地址。

        · offset_8>為8位立即數,內存訪問地址偏移量。

        (3)操作偽代碼

        offset_8 = (immedH 4) OR immedL

        If U = = 1 then

        Address = Rn + offset_8

        Else

        Address = Rn – offset_8

        (4)說明

        ① 如果指令中沒有指定立即數,使用[Rn>],編譯器按[Rn>,#0]形式編碼。

        ② 如果Rn被指定為程序計數器r15,其值為當前指令地址加8。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 开封县| 巴林右旗| 汉寿县| 桦川县| 板桥市| 榆林市| 慈利县| 铜川市| 图们市| 那曲县| 论坛| 武宁县| 宜君县| 白水县| 温泉县| 博爱县| 南宁市| 潮州市| 长寿区| 定南县| 乐安县| 柳林县| 澄江县| 武穴市| 兴化市| 迭部县| 红河县| 太仓市| 阳城县| 茂名市| 进贤县| 酉阳| 惠来县| 乌鲁木齐县| 怀远县| 大理市| 调兵山市| 长寿区| 贺兰县| 通辽市| 烟台市|