Arm的37個通用寄存器【轉】

轉自:https://blog.csdn.net/zwh847021940/article/details/53205338?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-53205338-blog-111569830.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1-53205338-blog-111569830.pc_relevant_default&utm_relevant_index=2

Arm的37個通用寄存器
1.Arm的7中工作模式
ARM 有7個基本工作模式:

User : 非特權模式,大部分任務執行在這種模式

 

FIQ : 當一個高優先級(fast) 中斷產生時將會進入這種模式

IRQ : 當一個低優先級(normal) 中斷產生時將會進入這種模式

Supervisor :當復位或軟中斷指令執行時將會進入這種模式

Abort : 當存取異常時將會進入這種模式

Undef : 當執行未定義指令時會進入這種模式

 

System : 使用和User模式相同寄存器集的特權模式

注意:
(1)除User(用戶模式)是Normal(普通模式)外,其他6種都是Privilege(特權模式)。

(2)Privilege中除Sys模式外,其餘5種爲異常模式。

(3)各種模式的切換,可以是程序員通過代碼主動切換(通過寫CPSR寄存器);也可以是CPU在某些情況下自動切換。

(4)各種模式下權限和可以訪問的寄存器不同。

 

3.ARM中7種模式下的通用寄存器

 

 

(1)Arm中一共有37個通用寄存器,如上圖。

(2)圖中有名字相同的寄存器,但是不是同一個寄存器。如,r13在不同的模式下都有,但是不同模式下的r13都是不一樣的,這種寄存器叫影子寄存器。

 

 

 

(1)黑色部分的代表共用的寄存器,其他顏色的代表對應工作模式下才有的寄存器。

(2)爲什麼7種模式下的r13是不一樣的?

r13(sp)是堆棧指針,如果7種模式都是採用同一個堆棧指針的話,在某一個模式中,堆棧出現了問題,則會導致7中模式都奔潰,故7種模式的棧都是不同的。

(3)r14(lr)是用來存儲返回地址的,每種模式的r14都是不同的寄存器。

(4)spsr是用於切換模式前,將當前模式的cpsr的內容保存起來,在返回時,再將spsr的值給cpsr。

(5)PC(Program control register)爲程序指針,PC指向哪裏,CPU就會執行哪條指令(所以程序跳轉時就是把目標地址代碼放到PC中)

(6)整個CPU中只有一個PC(CPSR也只有一個,但SPSR有5個)。

(7)ARM共有37個寄存器,都是32位長度

(8)37個寄存器中30個爲“通用”型,1個固定用作PC,一個固定用作CPSR,5個固定用作5種異常模式下的SPSR。

 

 

4.CPSR程序狀態寄存器

(1)條件位:

N:ALU計算結果爲負

Z:ALU計算結果爲0

C:ALU計算中有進位

V:ALU計算中有溢出

這四位默認爲0,當運算過程中發生以上四種情況時,則相應位會置1。

(2)中斷禁止位

I:普通中斷,爲1時,禁止全部的普通中斷

F:快速中斷,爲1時,禁止全部的快速中斷
————————————————
版權聲明:本文爲CSDN博主「北雪-南暖」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zwh847021940/article/details/53205338

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章