新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM寄存器的7種工作模式和幾種尋址方式

        ARM寄存器的7種工作模式和幾種尋址方式

        作者: 時間:2016-11-09 來源:網絡 收藏
        ARM寄存器的7種工作模式
        CPSR[5:0]
        10000 user
        10001 FIQ
        10010 IRQ
        10011 SVC
        10111 中止
        11011 未定義

        11111 系統

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

        用這兩個指令讀寫CPRS的值

        msr

        mrs

        如:

        MRS R1,CPSR ; 將CPSR狀態寄存器讀取,保存到R1中
        MRS R2,SPSR ; 將SPSR狀態寄存器讀取,保存到R2中
        MSR R1,CPSR ; 將R1狀態寄存器讀取,保存到CPSR中
        MSR R2,SPSR ; 將R2狀態寄存器讀取,保存到SPSR中

        工作模式
        ARM微處理器支持7種工作模式,分別為:
        1、用戶模式(Usr)
        用于正常執行程序
        2、快速中斷模式(FIQ)
        用于高速數據傳輸
        3、外部中斷模式(IRQ)
        用于通常的中斷處理
        4. 管理模式(svc)
        操作系統使用的保護模式
        5. 數據訪問終止模式(abt)
        當數據或指令預取終止時進入該模式,可用于虛擬存儲及
        存儲保護。
        6. 系統模式(sys)
        運行具有特權的操作系統任務。
        7. 未定義指令中止模式(und)
        當未定義的指令執行時進入該模式,可用于支持硬件

        ARM微處理器的運行模式可以通過軟件改
        變,也可以通過外部中斷或異常處理改變。
        應用程序運行在用戶模式下,當處理器運行
        在用戶模式下時,某些被保護的系統資源是
        不能被訪問的。

        除用戶模式以外,其余的所有6種模式稱之為
        非用戶模式,或特權模式(Privileged
        Modes);其中除去用戶模式和系統模式以
        外的5種又稱為異常模式(Exception
        Modes),常用于處理中斷或異常,以及需

        要訪問受保護的系統資源等情況。

        所謂尋址方式就是處理器根據指令中給出的地址信息來尋找物理地址的方式。

        立即尋址
        立即尋址也叫立即數尋址,這是一種特殊的尋址方式,操
        作數本身就在指令中給出,只要取出指令也就取到了操作
        數。這個操作數被稱為立即數,對應的尋址方式也就叫做
        立即尋址。例如以下指令:
        ADD R0,R0,#1 ;R0←R0+1
        ADD R0,R0,#0x3f ;R0←R0+0x3f
        在以上兩條指令中,第二個源操作數即為立即數,要求以
        “#”為前綴,對于以十六進制表示的立即數,還要求在
        “#”后加上“0x”或“&”。

        寄存器尋址

        寄存器尋址就是利用寄存器中的數值作為操作
        數,這種尋址方式是各類微處理器經常采用的
        一種方式,也是一種執行效率較高的尋址方
        式。
        ADD R0,R1,R2 ;R0←R1+R2
        該指令的執行效果是將寄存器R1和R2的內容
        相加,其結果存放在寄存器R0中。

        寄存器間接尋址

        寄存器間接尋址就是以寄存器中的值作為操作數的地
        址,而操作數本身存放在存儲器中。例如以下指令:
        ADD R0,R1,[R2] ;R0←R1+[R2]
        LDR R0,[R1] ;R0←[R1]
        在第一條指令中,以寄存器R2的值作為操作數的地
        址,在存儲器中取得一個操作數后與R1相加,結果存
        入寄存器R0中。第二條指令將以R1的值為地址的存儲
        器中的數據傳送到R0中。

        基址變址尋址

        基址變址尋址就是將寄存器(該寄存器一般稱作基址寄存器)
        的內容與指令中給出的地址偏移量相加,從而得到一個操作數
        的有效地址:
        LDR R0,[R1,#4] ;R0←[R1+4]
        LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+4
        LDR R0,[R1] ,#4 ;R0←[R1]、R1←R1+4
        LDR R0,[R1,R2] ;R0←[R1+R2]

        多寄存器尋址

        采用多寄存器尋址方式,一條指令可以完成多個寄存器值的傳
        送。這尋址方式可以用一條指令完成傳送最多16個通用寄存器
        的值。以下指令:
        LDMIA R0,{R1,R2,R3,R4}

        ;R1←[R0]
        ;R2←[R0+4]
        ;R3←[R0+8]
        ;R4←[R0+12]
        該指令的后綴IA表示在每次執行完加載/存儲操作后,R0按字長
        度增加,因此,指令可將連續存儲單元的值傳送到R1~R4。

        相對尋址

        與基址變址尋址方式相類似,相對尋址以程序計數器PC的當
        前值為基地址,指令中的地址標號作為偏移量,將兩者相加
        之后得到操作數的有效地址。以下程序段完成子程序的調用
        和返回,跳轉指令BL采用了相對尋址方式:
        BL NEXT ;跳轉到子程序NEXT處執行
        ……
        NEXT
        ……
        MOV PC,LR ;從子程序返回

        堆棧尋址

        堆棧是一種數據結構,按先進后出(First In
        Last Out,FILO)的方式工作,使用一個稱作堆
        棧指針的專用寄存器指示當前的操作位置,堆棧
        指針總是指向棧頂。
        遞增堆棧:向高地址方向生長
        遞減堆棧:向低地址方向生長
        滿堆棧:堆棧指針指向最后壓入堆棧的有效數據項
        空堆棧:堆棧指針指向下一個要放入數據的空位置



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 中阳县| 日照市| 乌什县| 辰溪县| 德令哈市| 抚宁县| 祁东县| 日土县| 临澧县| 吉林省| 京山县| 仲巴县| 泽普县| 灵寿县| 集贤县| 奇台县| 沐川县| 布拖县| 大邑县| 灵山县| 和田县| 三台县| 丹棱县| 永安市| 天气| 沙湾县| 夏邑县| 丹阳市| 大荔县| 霍山县| 荔波县| 吴江市| 平凉市| 博爱县| 绥德县| 巴彦县| 梁山县| 西林县| 惠水县| 安西县| 巨鹿县|