ARM的約定
byte 8bits
halfword 16bits
word 32bits
ARM Core 提供的指令集
ARM指令集 32bits
Thumb 指令集 16bits
Thumb2 指令集 16&32bits
ARM CPU的七種工作模式
符號 | 解釋 |
---|---|
User | 用戶模式,大部分任務執行在這種模式 |
FIQ | 快速中斷模式,當一個更高優先級中斷產生時,會進入這種模式 |
IRQ | 中斷模式,當一個低優先級終端產生時,會進入這種模式 |
Supervisor | 復位或軟中斷指令執行時會進入這種模式 |
Abort | 存取異常,當存取異常時會進入這種模式 |
Undef | 未定義指令,當執行未定義指令時會進入這種模式 |
System | 系統模式,使用和User模式相同的寄存器集的特權模式 |
除User模式是normal(普通模式)外,其他6種都是Privilege(特權模式),特權模式中,除Sys模式外,其餘5種都是異常模式。
各種模式之間的切換,可以是程序員通過代碼手動切換(寫CPSR寄存器),也可以是CPU在某些情況下自動切換。
各種模式下可以訪問的CPU寄存器不同
ARM CPU的37個寄存器
CPU在不同的模式下可以反問的CPU寄存器不同,上圖中黑色部分是user模式可以訪問的寄存器,FIQ中的黑色部分表示和User模式下的一樣,及FIQ模式下訪問的r0和User模式下的r0是同一個寄存器,而灰色的r8是FIQ模式特有的自己的寄存器。同理,IRQ下的r13,r14同樣也是自己模式下的私有寄存器,只有在自己的模式下才能訪問。
ARM共有37個寄存器,都是32位長度。
37個寄存器中30個爲通用型,1個固定用作PC,一個固定用做CPSR,五個固定用做5種異常模式下的SPSR。
CPSR寄存器用以表明CPU的某些狀態信息。各位意義如下圖
SPSR寄存器用於,保存進入異常模式時保存CPSR中的數據,當從異常模式返回用戶模式時,用以恢復CPSR中的數據。
r15寄存器也叫pc (program control)寄存器,是程序指針,pc指向哪裏,CPU就會執行pc指向地址的指令。
ARM異常處理
所有正常工作之外的流程叫做異常。中斷也是異常的一種。
當異常發生時,CPU會自動跳轉到固定的地址運行,這個固定的地址就是終端向量表,中斷向量表中存儲所有異常的應跳轉到的程序地址。異常向量表是硬件向軟件提供的處理異常的支持。
ARM異常處理流程:當異常產生式,首先拷貝CPSR到 SPSR_,
然後設置適當的CPSR位,改變處理器工作模式,進入ARM態,進行異常處理,保存返回地址LR_設置PC爲相應的異常向量。
當異常返回時,從SPSR_恢復CPSR,從LR_恢復PC
這些操作只能在ARM態進行。