ARM Cortex-A8 的學習筆記(2)——ARM寄存器

ARM 186瀏覽

??????? 上一篇介紹了關于學習ARM的開發環境以及工程文件編譯過程,今天,學習了關于ARM的CPU工作模式以及ARM寄存器部分,現整理一下筆記。

一、ARM指令集與Thumb指令集

?????? ARM指令集的指令是32位的,但為了兼容16位數據總線的應用系統和解決代碼密度問題而提出了16位的Thumb指令集。代碼密度就是單位存儲空間中包含的指令的個數。就示例1k的存儲空間能裝32條ARM指令,但能裝64條Thumb指令。所以,Thumb指令集可以大大節省了系統的存儲空間

?????? 但Thumb不是一個完整的體系結構,它不能實現ARM指令的全部功能,它必須要借助于ARM指令集。因此,運行程序時,需要ARM工作狀態與Thumb 工作狀態之間進行切換。后來,推出了Thumb-2指令集改善了Thumb的性能,添加了一些32位的Thumb指令用來解決Thumb功能不全的問題。現Thumb-2已經可以實現ARM指令集的所有功能,不必再進行ARM與Thumb工作狀態的切換。所有Cortex-A
系列都支持Thumb-2技術。


二、ARM CPU處理器模式

??????? ARM架構有9種處理器模式,其中有8種特權模式1種非特權模式的用戶模式。(見下圖)


???????? (1)用戶模式下只能執行一般的指令,不能訪問受操作系統保護的資源。示例不能訪問硬件,不能訪問受保護的內存,不能訪問受保護的數據等等。而特權模式下,可以訪問所有系統資源而且可以進行直接模式切換。所有應用程序都只能在用戶模式進行,而且不能直接進行模式切換。如果應用程序需要進行特殊訪問,則這時應用程序需產生異常處理,請求操作系統替它完成任務,這時,操作系統把用戶模式切換成特權模式,進行任務,完成后切換回用戶模式繼續執行應用程序。這樣的體系結構能使操作系統能控制整個系統的資源。

??????? (2) 處理器模式可以通過軟件控制切換,外部中斷異常處理過程切換。

???????? (3)下面簡單介紹一下幾個常見的模式:

??????????????????FIQ模式:快速中斷模式,當一個高優先級中斷產生時進入該模式,一般用于高速數據傳輸以及通道處理。

??????????????????IRQ模式:外部中斷模式,當一個低優先級中斷產生時進入該模式,一般用于通常中斷處理。

?????????????????Svc模式:特權模式,當處理器復位引腳有效時,進入該模式,程序跳轉到復位異常中斷處理程序處執行。復位異常中斷通常? 用于系統上電和系統復位兩種情況。還有軟中斷指令執行時,也進入該模式。軟中斷是通過一條具體指令SWI,引發中斷操作,實現從用戶模式切換到特權模式并執行特權程序。

?????????????????SYS模式:系統模式,該模式不是異常處理進入,并且與用戶模式具有完全一樣的寄存器,用于運行操作系統的特權任務,這樣可以保證在異常發生時,維持操作系統的運行的特權任務能夠正常運行。

????????????????? ABT模式:數據訪問終止模式,當數據訪問的目標地址不存在或不允許時, 存儲器就發出數據中止信號,處理器接收到信號進入該模式。

????????????????Undef模式:未定義指令中止模式:未定義異常就是內存中的程序指令處理器識別不了,這時進入該模式。未定義指令異常可用于在沒有物理協處理器的系統上,對協處理器進行軟件仿真,或通過軟件仿真實現指令集擴展。為了更好的理解這個模式,先簡單引入協處理器的這個概念。協處理器是一種芯片,用于減輕系統微處理器的特定處理任務。最常使用的協處理器是用于控制片上功能的系統協處理器,示例高速緩存存儲器管理單元等。舉個例子,在有浮點運算系統中,程序要進行浮點運算,ARM向協處理器發出指令,浮點協處理器收到指令會返回一個應答信號,ARM收到應答信號,繼續執行程序。如果在沒有浮點運算系統中,ARM沒有收到應答信號,那就認為沒有相應的物理協處理器,就產生未定義指令異常,可通過軟件模擬硬件操作,可用浮點運算軟件模擬包來支持浮點運算。


三、各個cpu模式的寄存器

?????? ARM 處理器共有37個寄存器,其中包括31個通用寄存器,6個狀態寄存器。(都是32位寄存器)

??????每一種異常模式都有一組專用寄存器。當應用程序發生異常中斷時,可以保證在進入異常模式時用戶模式的寄存器不被破壞。

??????

?????????? 1.R0~R12 是通用寄存器,放通用數據,各個模式的R0~R12是與USR模式共享(除了FIQ,R8-R12)。注意:Thumb指令集下只能訪問R0~R7低寄存器。

?????????? 2.R13(SP):堆棧指針寄存器,每一種異常模式都有其自己獨立的r13,指向各模式所對應的專用堆棧,這表明ARM處理器允許用戶程序有6個堆棧空間。

?????????? 3.R14(LP):連接寄存器,存儲子程序返回地址,跳轉指令會自動把返回地址放入R14,子程序把R14復制到PC實現返回。將r14入棧可以處理嵌套中斷。

?????????? 4.R15(PC):程序計數器指令分為三個階段執行(取指,譯碼,執行)。PC計數器總是指向取指的指令,不是譯碼不是執行的指令。ARM每條指令4個字節(32位),所以PC的值=當前程序執行位置+8字節。

??????????
5.APSR/CPSR:應用程序狀態寄存器(用戶模式下)/當前程序狀態寄存器(特權模式下),該寄存器就是用來存儲一些關于運算的信息,包括,條件標志位、中斷禁止位、當前處理器模式標志和控制狀態位等

?????? N - ALU負數 ??????Z - ALU零位 ? ? C - ALU進位操作 ???V - ALU操作溢出??? Q - 指示增強的DSP運算指令是否發生了溢出 ?

?????? J - 是否Jazelle狀態 ????? GE[3:0] - SIMD指令使用??? ? ?? IT[7:2] - Thumb-2指令的if...then...條件執行 ??

?????? E - 操作存儲的字節順序(大端模式、小端模式) ????? A - 是否禁止異步abort ? ?????????? I - 是否禁止IRQ ??? ??

?????? F - 是否禁止FRQ???????? T - 是否使用Thumb指令集??????? M[4:0] - 當前cpu模式編碼

??????????? 6.SPSR:已存儲程序狀態寄存器這個寄存器用于存放當前程序狀態寄存器的內容。在異常中斷退出時,可以用SPSR來恢復CPSR。由于用戶模式和系統模式不是異常中斷模式,所以USR沒有SPSR


以上是我學習后整理的一些筆記,如果有任何錯誤,請各位大神指教。

七星彩走势图2元网官网