<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

淺談ARM架構1

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò ) 收藏
ARM的處理器一般可以執行ARM的指令集(32bit或者64bit)和Thumb指令集(16bit)。執行不同的指令集時(shí)會(huì )進(jìn)行狀態(tài)跳轉,但是狀態(tài)的跳轉不會(huì )影響處理器的工作模式和相應存儲器的內容。

ARM->Thumb:操作數寄存器狀態(tài)為1,執行BX指令。

本文引用地址:http://dyxdggzs.com/article/201611/317875.htm

Thumb->ARM:操作數寄存器狀態(tài)為0,執行BX指令?;蛘呤翘幚砥鬟M(jìn)行異常處理(IRQ,FIQ,Reset,Undef,Abort,SWI ARM狀態(tài)執行)時(shí),把pc指針?lè )湃氘惓DJ芥溄蛹拇嫫髦?,并從異常向量地址開(kāi)始執行程序,也可以使得處理器切換到ARM狀態(tài)。

以上是整體指令集系統的情況,接下來(lái)說(shuō)一下ARM處理器的運行模式。用過(guò)Linux的都知道,操作系統有很多運行模式,其實(shí)著(zhù)很多的運行模式也是需要處理器支持的。ARM處理器的運行模式有七種:(除用戶(hù)模式,別的均屬于非用戶(hù)模式或者特權模式;除了用戶(hù)模式和系統模式,別的都稱(chēng)為異常模式)

用戶(hù)模式(USR):正常狀態(tài);

快速中斷模式(FIQ):用于高速數據傳輸或通道形式;

外部中斷模式(IRQ):用于通用的中斷處理;

管理模式(SVC):操作系統使用的保護模式;

數據訪(fǎng)問(wèn)終止模式(ABT):當數據或指令預取終止時(shí)進(jìn)入該模式,可用于虛擬存儲保護及存儲保護;

系統模式(SYS):運行具有特權的操作系統任務(wù);(Linux下就是root用戶(hù)了)

未定義指令中斷模式(UNDEF):當未定義的指令時(shí)進(jìn)入該模式,可支持硬件協(xié)處理器的軟件仿真。

那么我們?yōu)榱藢?shí)現以上的模式,我們在處理器這里資源應該如何分配呢?這里就涉及到寄存器組了。寄存器組就可以存儲這些模式,并在該模式下操作所需要的數據。

以下就是ARM指令集的寄存器組:

我們可以看到針對一些特定的模式寄存器組會(huì )有所改變。一共有37個(gè)32bit的寄存器。帶三角形的就是分組寄存器,專(zhuān)用寄存器??焖僦袛嗟?個(gè)便于快速中斷。R0~R7是未分組寄存器,通用。

當別的除了快速中斷模式之外,別的模式因為要訪(fǎng)問(wèn)R8~R12,就有可能在模式轉換的時(shí)候要保護現場(chǎng)。

一般來(lái)說(shuō),R13就是堆棧寄存器,當然指定別的寄存器也是可以的。

R14其實(shí)就是子程序鏈接地址,比如遞歸的時(shí)候,它里面存的就是返回地址。比如匯編的

MOV PC,LR

BX LR

以上就是實(shí)現了返回鏈接地址。另外R14還可以處理中斷或者異常返回。

R15就是程序計數器(PC)。ARM的[31:2]來(lái)保存地址,因為是4個(gè)字節。Thumb指令集就是[31:1]是地址,[0]=0。因為只有兩個(gè)字節,指令之間的地址就是相差2。由于是多級流水線(xiàn)設計,所以保存PC的時(shí)候要注意PC會(huì )因流水線(xiàn)而改變。

當然上面說(shuō)了很多模式還有什么狀態(tài)恢復,返回之前狀態(tài),堆棧處理啊其實(shí)和真正你在寫(xiě)處理器的時(shí)候不用管,因為很多功能是通過(guò)調度實(shí)現的,不用太在意更高抽象層次的東西。在這里說(shuō)一下只是增加一些在處理器硬件低層實(shí)現之后如果完成那些復雜程序有更多的了解。

CPSR:也就是程序狀態(tài)寄存器。這種寄存器就是存儲整個(gè)程序執行的一個(gè)狀態(tài)。包括了4 bit的條件代碼標志(N,Z,C,V);2bit中斷禁止位(分別用于一種類(lèi)型的中斷);5bit去對當前處理器操作模式進(jìn)行編碼的位;1bit用于指示當前執行的是Thumb還是ARM指令集。

如圖:

中斷禁止位:I,F

I = 1,禁止IRQ機制;F = 1,禁止FIQ機制。

T表示標志位,該位反應了處理器的運行狀態(tài)。


如果模式不確定,那么就會(huì )導致進(jìn)行復位。

看一下Thumb指令集系統:


thumb指令集系統的模式位的含義:



關(guān)鍵詞: ARM架

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>