ARM的7种工作模式、37个通用寄存器、CPSR程序状态寄存器
生活随笔
收集整理的這篇文章主要介紹了
ARM的7种工作模式、37个通用寄存器、CPSR程序状态寄存器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、ARM 采用的是32位架構
1、ARM約定
Byte:8 bits
Halfword:16 bits (2 byte)
Word:32 bits (4 byte)
2、大部分ARM core 提供
ARM 指令集(32-bit) 每條指令都是4個字節?
Thumb 指令集(16-bit )
Thumb2指令集(16 & 32bit)
二、ARM的7種基本工作模式
普通模式(Normal)
(1)User:非特權模式,大部分任務執行在這種模式
特權模式(Privilege)
(2)FIQ:當一個高優先級(fast) 中斷產生時將會進入這種模式
(3)IRQ:當一個低優先級(normal) 中斷產生時將會進入這種模式
(4)Supervisor:當復位或軟中斷指令執行時將會進入這種模式(SVC模式)
(5)Abort:當存取異常時將會進入這種模式
(6)Undef:當執行未定義指令時會進入這種模式
(7)System:使用和User模式相同寄存器集的特權模式。
- 各種模式的切換,可以是程序員通過代碼主動切換(通過寫CPSR寄存器),也可以是CPU在某些情況下自動切換。
- 各種模式下權限和可以訪問的寄存器不同。
- 同一時刻只處于其中一種模式。
- 操作系統有安全級別要求,因此CPU設計多種模式是為了方便操作系統的多種角色安全等級需要。
- 不同模式下,對資源的訪問權限不一樣。
三、37個通用寄存器
1、寄存器分類和區別
(1)SoC中有2類寄存器:通用寄存器和SFR
- 通用寄存器(ARM中有37個)是CPU的組成部分,CPU的很多活動都需要通用寄存器的支持和參與。
- SFR(special function register,特殊功能寄存器)屬于外設硬件的組成部分,我們通過訪問外設的SFR來編程操控這個外設,這就是硬件編程控制的方法。
(2)通用寄存器沒有地址,通過寄存器名字來訪問;而特殊功能寄存器有地址。
(3)寄存器是外設硬件的軟件編程接口API。使用軟件編程控制某一硬件,其實就是編程讀寫該硬件的寄存器。
2、37個通用寄存器
(1)ARM總共有37個寄存器,但是每種模式下最多只能看到18個寄存器,其他寄存器雖然名字相同但是在當前模式不可見。- 對r13這個名字來說,在ARM中共有6個名叫r13(又叫sp,棧指針)的寄存器,但是在每種特定處理器模式下,只有一個r13是當前可見的,其他的r13必須切換到他的對應模式下才能看到。這種設計叫影子寄存器(banked register)。
- 30個為“通用”型;
- 1個固定用作PC(Program control register,程序控制寄存器,PC指向哪里,CPU就會執行哪條指令,因此只有一個);
- 1個固定用作CPSR(程序狀態寄存器,用來記錄當前cpu的狀態,因此只有一個);
- 5個固定用作5種異常模式下的SPSR(Saved Program Status Register,程序狀態保存寄存器,用來保存CPSR的,返回時將spsr賦給cpsr)。
四、CPSR程序狀態寄存器 ?
(1)CPSR中各個bit位表明了CPU的某些狀態信息,這些信息非常重要,和后面學到的匯編指令息息相關(譬如BLE指令中的E就和CPSR中的Z標志位有關)。 (2)CPSR中的I、F位和開中斷、關中斷有關。 (3)CPSR中的mode位(bit4~bit0共5位)決定了CPU的工作模式,在uboot代碼中會使用匯編進行設置。
總結
以上是生活随笔為你收集整理的ARM的7种工作模式、37个通用寄存器、CPSR程序状态寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SVD的物理意义
- 下一篇: Ftp客户端概要设计