新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 數據傳送指令之: 程序狀態寄存器指令

        數據傳送指令之: 程序狀態寄存器指令

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

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

        5.6

        指令集提供了兩條指令,可直接控制程序狀態寄存器(PSR,Program State Register)。指令用于把CPSR或SPSR的值傳送到一個寄存器;MSR與之相反,把一個寄存器的內容傳送到CPSR或SPSR。這兩條指令結合,可用于對CPSR和SPSR進行讀/寫操作。

        交換指令如表5.5所示。

        表5.5

        指 令

        作 用

        操 作

        把程序狀態寄存器的值送到一個通用寄存器

        Rd=SPR

        MSR

        把通用寄存器的值送到程序狀態寄存器或把一個立即數送到程序狀態字

        PSR[field]=Rm或PSR[field]=immediate

        在指令語法中可看到一個稱為fields的項,它可以是控制(C)、擴展(X)、狀態(S)及標志(F)的組合。

        注意

        程序不能通過直接修改CPSR中的T位控制直接將程序狀態切換到Thumb狀態,必須通過BX等指令完成程序狀態的切換。

        5.6.1

        (1)指令編碼格式

        MRS指令用于將程序狀態寄存器的內容傳送到通用寄存器中。

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

        圖5.22 MRS指令編碼格式

        當數據被移到通用寄存器以后,就可以對數據進行處理。

        (2)指令的語法格式

        MRS{cond>} Rd>,CPSR

        MRS{cond>} Rd>,SPSR

        ① cond>

        為指令編碼中的條件域。它指示LDM(1)指令在什么條件下執行。當cond>忽略時,指令為無條件執行(cond=AL(Alway))。

        ② Rd>

        目標寄存器。當r15被用作目標寄存器時,指令執行結果不可預知。

        (3)指令操作的偽代碼

        指令操作偽代碼如下面程序段所示。

        If ConditionPassed{cond} then

        If R==1 then

        Rd=SPSR

        ELSE

        Rd=CPSR

        注意

        ① 當操作碼opcode[11∶0]≠0x000時,指令的執行結果不可預知。

        ② 當操作碼opcode[19∶16]≠0b1111時,指令的執行結果不可預知。

        ③ 當在用戶模式下對SPSR進行操作時,指令的執行結果不可預知。

        5.6.2 MSR

        (1)指令編碼格式

        MSR指令用于將通用寄存器中的內容或立即數傳送到程序狀態寄存器中。因此指令的編碼格式也有兩種格式。

        指令的源操作數為通用寄存器時編碼格式如圖5.23所示。

        圖5.23 源操作數為通用寄存器的MSR指令編碼

        指令的源操作數為立即數時編碼格式如圖5.24所示。

        圖5.24 源操作數為立即數的MSR指令編碼


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 绵竹市| 连江县| 政和县| 抚顺市| 安乡县| 平遥县| 彩票| 同仁县| 海门市| 扬州市| 广汉市| 平泉县| 文成县| 彭泽县| 稻城县| 皋兰县| 巴青县| 新和县| 天长市| 峨边| 阜新市| 巴林右旗| 红河县| 乳山市| 辽阳县| 景洪市| 桑植县| 门头沟区| 绥棱县| 莱西市| 德化县| 新巴尔虎右旗| 石嘴山市| 贺兰县| 台北市| 金山区| 漳平市| 郁南县| 阜新| 潢川县| 麻栗坡县|