新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 協處理器及其他指令之:狀態寄存器訪問指令

        協處理器及其他指令之:狀態寄存器訪問指令

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

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

        9.2

        指令集提供了兩條指令,可直接控制程序狀態寄存器psr。MRS指令用于把cpsr或者spsr的值傳送到一個寄存器;MSR與之相反,它將一個寄存器的內容傳送到cpsr或者spsr。這兩條指令結合,可用于對cpsr和spsr進行讀/寫操作。

        表9.2總結了。

        表9.2

        助記符

        含義

        操作

        MRS

        將程序狀態字寄存器的值送到通用寄存器

        Rd=spr

        MSR

        將通用寄存器的值送到程序狀態字寄存器

        Psr[field]=Rm

        MSR

        將一個立即數送到程序狀態字

        Psr[field]=immediate

        當需要保存或修改當前模式下CISR或SPSR的內容時,首先必須將這些內容傳送到通用寄存器中,對選擇的位進行修改,然后將數據回寫到狀態寄存器。對于和Thumb的狀態切換也是如此,程序不能通過直接改寫CPSR中的T控制位直接將程序狀態切換到Thumb狀態,必須通過BX等指令完成程序狀態的切換。

        9.2.1程序狀態字內容送通用寄存器指令MRS

        1.指令編碼格式

        讀狀態寄存器指令MRS。在寄存器中,只有MRS指令可以將狀態寄存器CPSR或SPSR讀出到通用寄存器中。將程序狀態字內容讀取到通用寄存器中后就可以對其進行計算、修改等操作。

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

        圖9.6MRS指令編碼格式

        2.指令的語法格式

        MRS{cond>}Rd>,CPSR

        MRS{cond>}Rd>,SPSR

        ①cond>

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

        ②Rd>

        確定指令的目標寄存器。如果r15被用作目標寄存器,指令的執行結果不可預知。

        3.指令操作的偽代碼

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

        IfConditionPassed{cond}then

        IfR==1then

        Rd=SPSR

        Else

        Rd=CPSR

        4.指令的使用

        MRS指令注意用于以下3種場合:

        ·當需要保存或修改當前模式下CPSR或SPSR的內容時,首先必須將這些內容傳送到通用寄存器中,對選擇的位進行修改,然后將數據回寫到狀態寄存器。

        ·當異常中斷允許嵌套時,需要在進入異常中斷之后,嵌套中斷發生之前保存當前處理器模式對應的SPSR。這時需要先通過MRS指令讀出SPSR的值,再用其他指令(如壓棧指令)將SPSR值保存起來。

        ·在進程切換時也需要保存當前狀態寄存器的值。

        注意

        在用戶模式下對CPSR[23∶0]進行任何修改都是無效的。另外,盡量避免在用戶模式或系統模式下訪問SPSR,因為在這種模式下沒有SPSR,如果執行此操作,指令的執行結果不可預知。

        5.指令舉例

        (1)將CPSR狀態寄存器讀取,保存到r1中。

        MRSr1,CPSR

        (2)將SPSR狀態寄存器讀取,保存到r2中。

        MRSr2,SPSR

        (3)MSR指令讀取CPSR,用來判斷ALU的狀態標志或IRQ/FIQ中斷是否允許等;在異常處理程序中,讀SPSR可知道進入異常前的處理器狀態等。MRS與MSR配合使用,實現CPSR或SPSR寄存器的讀-修改-寫操作,可用來進行處理器模式的切換或禁止/使能IRQ/FIQ中斷等設置。另外,進行切換或允許異常中斷嵌套時,也需要使用MRS指令讀取SPSR狀態值保存起來。

        下面的例子使能IRQ中斷。

        ENABLE_IRQ

        MRSr0,CPSR

        BICr0,r0,#0x80

        MSRCPSR_c,r0

        MOVPC,LR

        下面的例子禁止IRQ中斷。

        DISABLE_IRQ

        MRSr0,CPSR

        ORRr0,r0,#0x80

        MSRCPSR_c,r0

        MOVPC,LR


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 南通市| 遵义县| 盐城市| 旬邑县| 云浮市| 卓尼县| 寿光市| 化州市| 辽阳市| 和龙市| 光泽县| 信阳市| 武隆县| 海丰县| 宁国市| 海门市| 屏边| 黎城县| 滦南县| 吐鲁番市| 德令哈市| 萨嘎县| 邵阳市| 曲沃县| 黄陵县| 宿松县| 读书| 滕州市| 民勤县| 贞丰县| 恩平市| 翼城县| 安福县| 岳池县| 吉木萨尔县| 东乡县| 佛冈县| 弥勒县| 叙永县| 邻水| 平江县|