基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记
ARM9處理器工作模式
改變工作模式的方法:①軟件改變,改變CPSR(當(dāng)前程序狀態(tài)寄存器)的低5位即可;②外部中斷或異常處理改變;
用戶模式:大部分情況下,程序是運(yùn)行在用戶模式下,此時(shí)某些被保護(hù)的寄存器是不能訪問;
非用戶模式:除了用戶模式之外的模式;也被稱作特權(quán)模式。特權(quán)模式下,可以訪問寄存器和一下片內(nèi)資源。
異常模式:處理用戶模式和系統(tǒng)模式外其余的5中模式,常用于處理中斷或異常以及訪問需要被保護(hù)的系統(tǒng)資源等情況;
系統(tǒng)模式僅存在于ARM體系結(jié)構(gòu)版本V4以上,系統(tǒng)模式和用戶模式擁有完全相同的寄存器;
ARM9的兩種工作狀態(tài)
處理器的兩種操作狀態(tài):
ARM狀態(tài):32位,這種狀態(tài)下執(zhí)行的是字方式的ARM指令(地址[1:0]為0)。
Thumb狀態(tài):16位,這種狀態(tài)下執(zhí)行半字方式的Thumb指令(地址[0]為0);
Thumb指令集的特點(diǎn):
Thumb指令集是ARM指令集的功能子集,但是與ARM代碼相比,可以節(jié)省30%~40%以上的儲(chǔ)存空間,同時(shí)兼?zhèn)?2位代碼的所有優(yōu)點(diǎn);
ARM內(nèi)部寄存器組織
ARM存儲(chǔ)系統(tǒng):(1)復(fù)雜:寄存器,Cache,主存儲(chǔ)器,輔助存儲(chǔ)器;(2)簡(jiǎn)單:直接分為存儲(chǔ)器和寄存器即可;
寄存器特點(diǎn):
數(shù)量少,讀寫速度快;每個(gè)寄存器內(nèi)都有一個(gè)名字,但是沒有像存儲(chǔ)器一樣的存儲(chǔ)地址;不同的存儲(chǔ)器有不同的寄存器配置方案;
寄存器功能:暫存指令,數(shù)據(jù)和地址;
寄存器分組
分組的依據(jù):處理器的工作狀態(tài)和工作模式的不同。
分組的特點(diǎn):相同名字的寄存器在不同組中是兩個(gè)完全不同的物理寄存器;程序代碼運(yùn)行時(shí)的設(shè)計(jì)的工作寄存器組是由ARM9微處理器的工作模式確定的;
寄存器類別:通用寄存器,程序狀態(tài)寄存器,程序計(jì)數(shù)器;
(1) 通用寄存器
R0~R7:未分組寄存器;對(duì)于任何工作模式,這些寄存器都對(duì)應(yīng)相同的32位寄存器地址;
R8~R14:為分組寄存器;對(duì)應(yīng)的物理地址取決于當(dāng)前處理器的工作模式;
R8~R12:有兩個(gè)分組的物理寄存器;一組用于FIQ模式;一組用于非FIQ模式;
R0~R13:完全通用寄存器;保存數(shù)據(jù)和地址的通用寄存器;不會(huì)被體制結(jié)構(gòu)作為特殊用途,并且可用于任何使用通用寄存器的指令;
R13,R14:分別有6個(gè)分組的寄存器。一個(gè)用于用戶模式和系統(tǒng)模式,另外5組寄存器分別對(duì)應(yīng)5中工作模式;
異常處理:異常處理程序負(fù)責(zé)初始化自己的R13,使其指向該異常模式專用的棧地址。在異常處理程序入口處,將其他寄存器的內(nèi)容保存到堆棧,返回時(shí),重新將這些值加載到寄存器;從而保護(hù)現(xiàn)場(chǎng)的目的;
R13:堆棧指針SP;在ARM指令集集中,沒有以特殊方式使用R13的指令或其他功能,只是習(xí)慣上都這樣使用。但是Thumb指令集中存在使用R13的指令;
R14:鏈接寄存器LR;在結(jié)構(gòu)上有兩個(gè)功能:
① 在每種工作模式下,模式本身的R14用于保存子程序返回的地址。例如,當(dāng)ARM9處理器執(zhí)行帶鏈接的分支指令(如BL)時(shí),R14保存R15(PC)的值;
② 發(fā)生異常時(shí),相應(yīng)的寄存器分組R14_svc,R14_abt,R14_und,R14_ird和R14_fiq用來保存R15的返回值;
R15:程序計(jì)數(shù)器(PC)。在ARM狀態(tài)下,R15[1:0]=0x00;PC的值為R15[31:2];
(2) 狀態(tài)寄存器CPSR
R16:通用寄存器;看下表:
1)條件代碼標(biāo)志位NZCV:
N:運(yùn)算結(jié)果的最高位顯示在該標(biāo)志位上。對(duì)于有符號(hào)二進(jìn)制補(bǔ)碼,當(dāng)結(jié)果為負(fù)數(shù)N=1,結(jié)果為正數(shù)或零為0;
Z:當(dāng)指令結(jié)果為0時(shí)Z=1(通常表示比較結(jié)果“相等”)否則為0;
C:加法指令最高位進(jìn)位C=1,否則C=0;減法指令最高位未借位C=1,借位則C=0;結(jié)合移位操作時(shí)C等于從最高位最后溢出的值;其他指令C不變;
V:加/減法運(yùn)算并發(fā)生溢出時(shí)V=1,否則V=0;其他指令V不變;
(2)控制位IFTM4M3M2M1M0
當(dāng)發(fā)生異常時(shí)這些位被硬件改變;當(dāng)處理器處于特權(quán)模式時(shí),可用軟件操作這些位;
① 中斷處理位:中斷使用的前提是中斷沒有被禁止;
I=1時(shí)IRQ中斷被禁止
F=1時(shí)FIQ中斷被禁止
② 處理器標(biāo)志位:T位反映了處理的的工作狀態(tài)
T=1時(shí),處理器處于Thumb狀態(tài)下
T=0時(shí),處理器處于ARM狀態(tài)下;
③ 處理器模式位:決定處理器的工作模式,看下表格
(3)保留位
CPSR中的保留位被保留為將來使用。為了提高程序的可移植性,當(dāng)改變CPSR標(biāo)志位和控制位,不要改變這些保留位。另外要確保程序的運(yùn)行不受保留位的值的影響。因?yàn)閷硖幚砥鏖_能會(huì)將這些位設(shè)置為1或0;
ARM9的異常處理
什么是異常:當(dāng)正常的程序被暫時(shí)停止時(shí)就是發(fā)生了異常;異常是由一個(gè)內(nèi)部或外部產(chǎn)生一個(gè)引起處理器處理的額外事件;
什么是異常向量(exception vectors):
異常出現(xiàn)后,處理器強(qiáng)項(xiàng)從正常程序地址跳轉(zhuǎn)到異常程序所對(duì)應(yīng)的固定存儲(chǔ)器地址開始執(zhí)行程序,這些程序存儲(chǔ)器地址稱為異常向量;
ARM9體系支持其中異常處理
處理器一旦有復(fù)位信號(hào)輸入,ARM處理器就立即執(zhí)行當(dāng)前。復(fù)位后,ARM處理器在禁止中斷的管理模式下從地址0x00000000或0Xffff0000處開始執(zhí)行;
未定義指令異常
當(dāng)ARM處理器執(zhí)行協(xié)處理器指令時(shí),需等任一外部協(xié)處理器應(yīng)答后,才能真正執(zhí)行這條指令。若協(xié)處理器沒有回應(yīng),就會(huì)出現(xiàn)未定義指令異常。另外,試圖執(zhí)行未定義的指令也會(huì)出現(xiàn)未定義指令異常;
軟件中斷異常
軟件中斷異常指令SWI使處理器進(jìn)入管理模式,以請(qǐng)求特定的管理函數(shù);
預(yù)取中止異常
存儲(chǔ)器系統(tǒng)發(fā)出存儲(chǔ)器中止信號(hào)(Abort)時(shí),響應(yīng)取置激活的中止標(biāo)記所取的指令無效,茹處理器試圖執(zhí)行無效指令,則產(chǎn)生預(yù)約中止異常;茹指令未執(zhí)行,則不發(fā)生預(yù)約中止;
數(shù)據(jù)中止異常
存儲(chǔ)器發(fā)出存儲(chǔ)器中止信號(hào),響應(yīng)數(shù)據(jù)中止標(biāo)記的數(shù)據(jù)無效。
IRQ(外部中斷請(qǐng)求)異常
通過處理器上的IRQ輸入引腳,由外部產(chǎn)生IRQ異常。IRQ異常的優(yōu)先級(jí)比FIQ異常的優(yōu)先級(jí)低,當(dāng)進(jìn)入FIQ處理時(shí),會(huì)屏蔽IRQ異常;
FIQ(快速中斷請(qǐng)求)異常
通過FIQ上的輸入引腳,由外部產(chǎn)生FIQ異常;
異常優(yōu)先級(jí)
總結(jié)
以上是生活随笔為你收集整理的基于ARM9处理器的工作模式&工作状态&寄存器&异常类型总结笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝牙通信工作流程讲解
- 下一篇: 如何用计算机求一个正数的算术平方根,《用