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