<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          ARM學(xué)習(xí)筆記

          作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
          ARM微處理器支持7種運行模式,分別為:

          1.用戶模式(usr):ARM處理器正常的程序執(zhí)行狀態(tài);
          2.快速中斷模式(fiq):用于高速數(shù)據(jù)傳輸或通道管理;
          3.外部中斷模式(irq):用于通用的中斷處理;
          4.管理模式(svc):操作系統(tǒng)使用的保護模式;
          5.數(shù)據(jù)訪問終止模式(abt):當(dāng)數(shù)據(jù)或指令預(yù)取終止時進入該模式,用于虛擬存儲及存儲保護;
          6.系統(tǒng)模式(sys):運行具有特權(quán)的操作系統(tǒng)任務(wù);
          7.未定義指令中止模式(und):當(dāng)未定義指令執(zhí)行時進入該模式,可用于支持硬件協(xié)處理器的軟件仿真

          本文引用地址:http://www.ex-cimer.com/article/201611/318963.htm

          ARM體系結(jié)構(gòu)的存儲器格式有如下兩種:
          大端格式:字數(shù)據(jù)的高字節(jié)存儲在低地址中,字數(shù)據(jù)的低字節(jié)存放在高地址中;
          小端格式:與大端存儲格式相反,高地址存放數(shù)據(jù)的高字節(jié),低地址存放數(shù)據(jù)的低字節(jié)

          ARM寄存器總結(jié):
          ARM有16個32位的寄存器(r0到r15)。
          r15充當(dāng)程序寄存器PC,r14(link register)存儲子程序的返回地址,r13存儲的是堆棧地址。
          ARM有一個當(dāng)前程序狀態(tài)寄存器:CPSR。
          一些寄存器(r13,r14)在異常發(fā)生時會產(chǎn)生新的instances,比如IRQ處理器模式,這時處理器使用r13_irq和r14_irq
          ARM的子程序調(diào)用是很快的,因為子程序的返回地址不需要存放在堆棧中。
          1、 ARM處理器共有37個寄存器,其中包括:

          i. 31個通用寄存器,包括程序計數(shù)器(PC)在內(nèi)。都是32位寄存器

          ii. 6個狀態(tài)寄存器,都是32位寄存器,但目前只使用了其中12位

          2、 ARM處理器有7種不同的處理器模式,在每一種處理器模式中有一組相應(yīng)的寄存器組

          。任意時刻(也就是任意的處理器模式下),可見的寄存器包括15個通用寄存器(R0~

          R14)、一個或兩個狀態(tài)寄存器及程序計數(shù)器(PC)。在所有的寄存器中,有些是各模式

          共用的同一個物理寄存器,有些是各模式自己擁有的獨立的物理寄存器。

          3、通用寄存器可以分為3類:未備份寄存器(R0~R7)、備份寄存器(R8~R14)和程序

          計數(shù)器PC(R15)。對于每一個未備份寄存器來說,在所有的處理器模式下指的都是同一

          個物理寄存器。對應(yīng)備份寄存器R8~R12來說,每個寄存器對應(yīng)兩個不同的物理寄存器,

          這使得中斷處理非常簡單。例如,僅僅使用R8~R14寄存器時,F(xiàn)IQ處理程序可以不必執(zhí)行

          保存和恢復(fù)中斷現(xiàn)場的指令,從而使中斷處理過程非常迅速。對于備份寄存器R13和R14

          來說,每個寄存器對應(yīng)6個不同的物理寄存器,其中的一個是用戶模式和系統(tǒng)模式共用的

          ,另外的5個對應(yīng)于其他5種處理器模式。

          4、每一種異常模式擁有自己的物理的R13。應(yīng)用程序初始化該R13,使其指向該異常模

          式專用的棧地址。當(dāng)進入異常模式時,可以將需要使用的寄存器保存在R13所指的棧中;

          當(dāng)退出異常處理程序時,將保存在R13所指的棧中的寄存器值彈出。這樣就使異常處理程

          序不會破壞被其中斷程序的運行現(xiàn)場。

          5、 寄存器R14又被稱為連接寄存器(Link Register,LR),在ARM體系中具有下面兩種

          特殊的作用:

          i. 每一種處理器模式自己的物理R14中存放當(dāng)前子程序的返回地址。當(dāng)通過BL或BLX指令

          調(diào)用子程序時,R14被設(shè)置成該子程序的返回地址。在子程序中,當(dāng)把R14的值復(fù)制到程

          序計數(shù)器PC中時,子程序即返回。

          ii. 當(dāng)異常中斷發(fā)生時,該異常模式特定的物理R14被設(shè)置成該異常模式將要返回的地址

          ,對于有些異常模式,R14的值可能與將返回的地址有一個常數(shù)的偏移量。具體的返回方

          式與子程序返回方式基本相同。

          6、 由于ARM采用了流水線機制,當(dāng)正確讀取了PC的值時,該值為當(dāng)前指令地址值加8個

          字節(jié)。也就是說,對于ARM指令集來說,PC指向當(dāng)前指令的下兩條指令的地址,由于ARM

          指令是字節(jié)對齊的,PC值得第0位和第1位總為0。

          7、 對于ARM版本3以及更低的版本,寫入R15的地址值的bits[1:0]被忽略,對于ARM版本

          4以及更高的版本,程序必須保證寫入R15寄存器的地址值的bits[1:0]為0b00;否則會產(chǎn)

          生不可預(yù)知的結(jié)果。對于Thumb指令集來說,指令是半字對齊的。處理器將忽略bit[0]。

          還有一些指令對于R15的用法有一些特殊的要求。比如,指令BX利用bit[0]來確定是ARM

          指令,還是Thumb指令。

          8、 指令mov pc, pc將程序跳轉(zhuǎn)到當(dāng)前指令下面第2條指令處執(zhí)行。類似的指令還有

          add pc, pc, #0

          9、每一種處理器模式下都有一個專用的物理狀態(tài)寄存器,稱為SPSR(備份程序狀態(tài)寄

          存器)。當(dāng)特定的異常中斷發(fā)生時,這個寄存器用于存放當(dāng)前程序狀態(tài)寄存器的內(nèi)容。

          在異常中斷程序退出時,可以用SPSR中保存的值來恢復(fù)CPSR。

          10、由于用戶模式和系統(tǒng)模式不是異常中斷模式,所以它們沒有SPSR。當(dāng)在用戶模式或

          系統(tǒng)模式中 訪問SPSR,將會產(chǎn)生不可預(yù)知的結(jié)果。




          關(guān)鍵詞: ARM學(xué)習(xí)筆

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();