ARM處理器的2種工作狀態(tài)和7種工作模式及37個寄存器介紹
在安卓支持三類處理器ARM、Intel和MIPS里面,ARM無疑被使用得最為廣泛。那么ARM處理器到底是怎樣工作的呢?本文主要跟大家來詳細的介紹ARM處理器的兩種工作狀態(tài)和七種工作模式,最后奉上ARM處理器37個寄存器的詳細介紹。
ARM處理器的兩種工作狀態(tài)1、ARM狀態(tài):32位,ARM狀態(tài)執(zhí)行字對齊的32位ARM指令。
2、Thumb狀態(tài),16位,執(zhí)行半字對齊的16位指令。
3、用Bx Rn指令來進行兩種狀態(tài)的切換:
其中Bx是跳轉指令,而Rn是寄存器(1個字,32位),如果Rn的位0為1,則進入Thumb狀態(tài);如果Rn的位為0,這進入ARM狀態(tài)。(原 因:ARM指令的后兩位始終為0,沒有用,而Thumb指令的后一位始終為0,沒有用,因此采用位0來表示ARM指令與Thumb指令的切換標志位。)
注:1、ARM和Thumb兩種狀態(tài)之間的切換不影響處理器的工作模式和寄存器的內容。
2、ARM處理器在處理異常時,不管處理器處于什么狀態(tài),則都將切換到ARM狀態(tài)。
另外:ARM的M系列主要用Thumb指令,ARM9和A系列主要用ARM指令
S3C2440.S啟動代碼中根本就沒用Thumb指令
ARM處理器的7種工作模式CPU的模式可以簡單的理解為當前CPU的工作狀態(tài),比如:當前操作系統(tǒng)正在執(zhí)行用戶程序,那么當前CPU工作在用戶模式,這時網卡上有數(shù)據到達,產生中斷信號,CPU自動切換到一般中斷模式下處理網卡數(shù)據(普通應用程序沒有權限直接訪問硬件),處理完網卡數(shù)據,返回到用戶模式下繼續(xù)執(zhí)行用戶程序。
特權模式
除用戶模式外,其它模式均為特權模式(Privileged Modes)。ARM 內部寄存器 和一些 片內外設 在硬件設計上只允許(或者可選為只允許)特權模式下訪問。此外,特權模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。
異常模式
特權模式中除系統(tǒng)(system)模式之外的其他5種模式又統(tǒng)稱為異常模式。它們除了可以通過在特權下的程序切換進入外,也可以由特定的異常進入。比如硬件產生中斷信號進入中斷異常模式,讀取沒有權限數(shù)據進入中止異常模式,執(zhí)行未定義指令時進入未定義指令中止異常模式。其中管理模式也稱為超級用戶模式,是為操作系統(tǒng)提供軟中斷的特有模式,正是由于有了軟中斷,用戶程序才可以通過系統(tǒng)調用切換到管理模式。
7種工作模式介紹(1)用戶模式:
用戶模式是用戶程序的工作模式,它運行在操作系統(tǒng)的用戶態(tài),它沒有權限去操作其它硬件資源,只能執(zhí)行處理自己的數(shù)據,也不能切換到其它模式下,要想訪問硬件資源或切換到其它模式只能通過軟中斷或產生異常。
(2)系統(tǒng)模式:
系統(tǒng)模式是特權模式,不受用戶模式的限制。用戶模式和系統(tǒng)模式共用一套寄存器,操作系統(tǒng)在該模式下可以方便的訪問用戶模式的寄存器,而且操作系統(tǒng)的一些特權任務可以使用這個模式訪問一些受控的資源。
說明:用戶模式與系統(tǒng)模式兩者使用相同的寄存器,都沒有SPSR(Saved Program Statement Register,已保存程序狀態(tài)寄存器),但系統(tǒng)模式比用戶模式有更高的權限,可以訪問所有系統(tǒng)資源。
(3)一般中斷模式:
一般中斷模式也叫普通中斷模式,用于處理一般的中斷請求,通常在硬件產生中斷信號之后自動進入該模式,該模式為特權模式,可以自由訪問系統(tǒng)硬件資源。
(4)快速中斷模式:
快速中斷模式是相對一般中斷模式而言的,它是用來處理對時間要求比較緊急的中斷請求,主要用于高速數(shù)據傳輸及通道處理中。
(5)管理模式(Supervisor,SVC) :
管理模式是CPU上電后默認模式,因此在該模式下主要用來做系統(tǒng)的初始化,軟中斷處理也在該模式下。當用戶模式下的用戶程序請求使用硬件資源時,通過軟件中斷進入該模式。
說明:系統(tǒng)復位或開機、軟中斷時進入到SVC模式下。
(6)終止模式:
中止模式用于支持虛擬內存或存儲器保護,當用戶程序訪問非法地址,沒有權限讀取的內存地址時,會進入該模式,linux下編程時經常出現(xiàn)的segment fault通常都是在該模式下拋出返回的。
(7)未定義模式:
未定義模式用于支持硬件協(xié)處理器的軟件仿真,CPU在指令的譯碼階段不能識別該指令操作時,會進入未定義模式。
ARM處理器37個寄存器介紹ARM微處理器共有37個32位寄存器,其中31個為通用寄存器,6個為狀態(tài)寄存器。但是這些寄存器不能被同時訪問,具體哪些寄存器是可以訪問的,取決ARM處理器的工作狀態(tài)及具體的運行模式。但在任何時候,通用寄存器R14~R0、程序計數(shù)器PC、一個狀態(tài)寄存器都是可訪問的。
下面這幅圖就是ARM中的37 個寄存器
下面這幅圖是 7種工作模式下每個模式下的寄存器列表:
ARM狀態(tài)下的通用寄存器與程序計數(shù)器
ARM狀態(tài)下的程序寄存器
通用寄存器
通用寄存器
1、不分組寄存器(R0-R7)
2、分組寄存器(R8-R14)
程序計數(shù)器R15(PC)
不分組通用寄存器
R0-R7是不分組寄存器。這意味著在所有處理器模式下,訪問的都是同一個物理寄存器。不分組寄存器沒有被系統(tǒng)用于特別的用途,任何可采用通用寄存器的應用場合都可以使用未分組寄存器。
分組寄存器R8-R12
1、FIQ模式分組寄存器R8-R12
2、FIQ以外的分組寄存器R8-R12
分組寄存器R13、R14
1、寄存器R13通常做堆棧指針SP
2、寄存器R14用作子程序鏈接寄存器(Link Register-LR),也稱為LR,指向函數(shù)的返回地址。
程序計數(shù)器
寄存器R15被用作程序計數(shù)器,也稱為PC。其值等于當前正在執(zhí)行的指令的地址+8(因為在取地址和執(zhí)行之間多了一個譯碼的階段)。
狀態(tài)寄存器
0次