朱老師ARM裸機(jī)學(xué)習(xí)筆記(五):ARMCPU工作模式以及寄存器
ARM的約定
byte 8bits
halfword 16bits
word 32bits
ARM指令集 32bits
Thumb 指令集 16bits
Thumb2 指令集 16&32bits
除User模式是normal(普通模式)外,其他6種都是Privilege(特權(quán)模式),特權(quán)模式中,除Sys模式外,其余5種都是異常模式。
各種模式之間的切換,可以是程序員通過(guò)代碼手動(dòng)切換(寫CPSR寄存器),也可以是CPU在某些情況下自動(dòng)切換。
各種模式下可以訪問(wèn)的CPU寄存器不同
CPU在不同的模式下可以反問(wèn)的CPU寄存器不同,上圖中黑色部分是user模式可以訪問(wèn)的寄存器,F(xiàn)IQ中的黑色部分表示和User模式下的一樣,及FIQ模式下訪問(wèn)的r0和User模式下的r0是同一個(gè)寄存器,而灰色的r8是FIQ模式特有的自己的寄存器。同理,IRQ下的r13,r14同樣也是自己模式下的私有寄存器,只有在自己的模式下才能訪問(wèn)。
ARM共有37個(gè)寄存器,都是32位長(zhǎng)度。
37個(gè)寄存器中30個(gè)為通用型,1個(gè)固定用作PC,一個(gè)固定用做CPSR,五個(gè)固定用做5種異常模式下的SPSR。
CPSR寄存器用以表明CPU的某些狀態(tài)信息。各位意義如下圖
SPSR寄存器用于,保存進(jìn)入異常模式時(shí)保存CPSR中的數(shù)據(jù),當(dāng)從異常模式返回用戶模式時(shí),用以恢復(fù)CPSR中的數(shù)據(jù)。
r15寄存器也叫pc (program control)寄存器,是程序指針,pc指向哪里,CPU就會(huì)執(zhí)行pc指向地址的指令。
所有正常工作之外的流程叫做異常。中斷也是異常的一種。
當(dāng)異常發(fā)生時(shí),CPU會(huì)自動(dòng)跳轉(zhuǎn)到固定的地址運(yùn)行,這個(gè)固定的地址就是終端向量表,中斷向量表中存儲(chǔ)所有異常的應(yīng)跳轉(zhuǎn)到的程序地址。異常向量表是硬件向軟件提供的處理異常的支持。
ARM異常處理流程:當(dāng)異常產(chǎn)生式,首先拷貝CPSR到 SPSR_,
然后設(shè)置適當(dāng)?shù)腃PSR位,改變處理器工作模式,進(jìn)入ARM態(tài),進(jìn)行異常處理,保存返回地址LR_設(shè)置PC為相應(yīng)的異常向量。
當(dāng)異常返回時(shí),從SPSR_恢復(fù)CPSR,從LR_恢復(fù)PC
這些操作只能在ARM態(tài)進(jìn)行。