新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 處理器不同模式下寄存器

        處理器不同模式下寄存器

        作者: 時間:2016-11-09 來源:網絡 收藏

        1.1.1ARM處理器不同模式寄存器

        CPU的模式不同,在其對應模式下可以使用的寄存器也不相同,如表3-2所示:

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

        表3-2 ARM處理器模式下寄存器

        寄存器類別

        寄存器在匯編中的名稱

        各模式下實際訪問的寄存器

        用戶

        系統

        管理

        終止

        未定義

        中斷

        快中斷

        通用寄存器和程序計數器

        R0(a1)

        R0

        R1(a2)

        R1

        R2(a3)

        R2

        R3(a4)

        R3

        R4(v1)

        R4

        R5(v2)

        R5

        R6(v3)

        R6

        R7(v4)

        R7

        R8(v5)

        R8

        R8_fiq

        R9(SB,v6)

        R9

        R9_fiq

        R10(SL,v7)

        R10

        R10_fiq

        R11(FP,v8)

        R11

        R11_fiq

        R12(IP)

        R12

        R12_fiq

        R13(SP)

        R13

        R13_svc

        R13_abt

        R13_und

        R13_irq

        R13_fiq

        R14(LR)

        R14

        R14_svc

        R14_abt

        R14_und

        R14_irq

        R14_fiq

        R15(PC)

        R15

        狀態寄存器

        CPSR

        CPSR

        SPSR

        SPSR_abt

        SPSR_abt

        SPSR_und

        SPSR_irq

        SPSR_fiq

        其中R0~R7在所有模式下都可以使用的共有寄存器,R8~R12是快速中斷模式下私有的寄存器,其它模式下不能使用,之所以叫其快速中斷,是因為快速中斷模式下,這幾個私有寄存器里數據在模式切換時可以不用入棧保存。

        除了用戶模式和系統模式共用一組R13,R14,其余每種模式都私有自己的R13,R14,因為在每種模式下都有自己的棧空間用于執行程序,在執行程序過程中還要保存返回地址,這樣可以保證在進入不同模式時,當前模式下棧空間不被破壞。比如:網卡因為數據到達,產生了中斷進入中斷模式,在中斷模式下有自己的中斷處理例程(ISR),ISR在執行時要用到棧空間,因此要使用R13,R14。中斷處理完成后,返回用戶模式下,要繼續執行被網卡中斷信號中斷的執行程序。

        用戶模式和系統模式為什么要共用一組R13,R14呢?這是因為,在特權模式下可以自由切換工作模式,但是如果切換到用戶模式下,就不能再切換到特權模式了,這是CPU為操作系統提供的保護機制,但是有的時候就需要切換到用戶模式下去使用其R13,R14寄存器,比如當操作系統的進程進行上下文切換時,如果用戶模式和系統模式共用一組寄存器,那么可以切換到系統模式下(系統模式是特權模式)進行操作。

        所有R15和CPU同時只能處理一條指令,在取指時,有一個CPSR表示當前CPU的狀態即可。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 临清市| 措勤县| 将乐县| 德庆县| 昂仁县| 宁海县| 佛教| 新巴尔虎右旗| 墨竹工卡县| 罗江县| 什邡市| 石泉县| 和静县| 井陉县| 房产| 玛沁县| 涪陵区| 巴南区| 新龙县| 武城县| 白城市| 北川| 大竹县| 金溪县| 平泉县| 临高县| 安泽县| 渝中区| 无为县| 奉贤区| 普安县| 肃宁县| 桐柏县| 永仁县| 克山县| 松溪县| 重庆市| 那曲县| 塔城市| 新巴尔虎左旗| 天峻县|