1. 程式人生 > 其它 >Arm的37個通用暫存器【轉】

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