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

          新聞中心

          ARM寄存器簡(jiǎn)介

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
          ARM處理器含有37個(gè)寄存器,這些寄存器包括以下兩類寄存器。
          (1)31個(gè)通用寄存器:包括程序計(jì)數(shù)器PC等,這些寄存器都是32位寄存器。
          (2)6個(gè)狀態(tài)寄存器:狀態(tài)寄存器也是32位的寄存器,但是只使用了其中的12位。
          1.通用寄存器
          在ARM處理器的7種模式下都有一組對(duì)應(yīng)的寄存器組。在任意時(shí)刻,可見(jiàn)的寄存器組包括15個(gè)通用寄存器R0~R14、一個(gè)或兩個(gè)狀態(tài)寄存器和PC。在所有的寄存器中,有些是各種模式下共用的同一個(gè)物理寄存器,有些是各種模式自己獨(dú)立擁有的物理寄存器。詳細(xì)如表1-3所示。
          表1-3 ARM物理寄存器
          用戶模式
          系統(tǒng)模式
          特權(quán)模式
          中止模式
          未定義指令模
          外部中斷模
          快速中斷模
          R0
          R0
          R0
          R0
          R0
          R0
          R0
          R1
          R1
          R1
          R1
          R1
          R1
          R1
          R2
          R2
          R2
          R2
          R2
          R2
          R2
          R3
          R3
          R3
          R3
          R3
          R3
          R3
          R4
          R4
          R4
          R4
          R4
          R4
          R4
          R5
          R5
          R5
          R5
          R5
          R5
          R5
          R6
          R6
          R6
          R6
          R6
          R6
          R6
          R7
          R7
          R7
          R7
          R7
          R7
          R7
          R8
          R8
          R8
          R8
          R8
          R8
          R8_fiq
          R9
          R9
          R9
          R9
          R9
          R9
          R9_fiq
          R10
          R10
          R10
          R10
          R10
          R10
          R10_fiq
          R11
          R11
          R11
          R11
          R11
          R11
          R11_fiq
          R12
          R12
          R12
          R12
          R12
          R12
          R12_fiq
          R13
          R13
          R13_svc
          R13_abt
          R13_und
          R13_irq
          R13_fiq
          R14
          R14
          R14_svc
          R14_abt
          R14_und
          R14_irq
          R14_fiq
          PC
          PC
          PC
          PC
          PC
          PC
          PC
          CPSR
          CPSR
          CPSR
          CPSR
          CPSR
          CPSR
          CPSR
          SPSR_svc
          SPSR_abt
          SPSR_und
          SPSR_irq
          SPSR_fiq
          通用寄存器通常又可以分為下面3類。
          n 未備份寄存器:包括R0~R7。
          n 備份寄存器:包括R8~R14。
          n 程序計(jì)數(shù)器PC:即R15。
          1)未備份寄存器R0~R7
          對(duì)于每個(gè)未備份寄存器來(lái)說(shuō),在所有的處理器模式下指的都是同一個(gè)物理寄存器,在異常中斷造成處理器模式切換時(shí),由于不同的處理器模式使用相同的物理寄存器,可能造成寄存器中數(shù)據(jù)被破壞。未備份寄存器沒(méi)有被系統(tǒng)用于特別的用途,任何可采用通用寄存器的應(yīng)用場(chǎng)合都可以使用未備份寄存器。
          2)備份寄存器R8~R14
          備份寄存器中的每個(gè)寄存器對(duì)應(yīng)于兩個(gè)不同的物理寄存器。例如,當(dāng)使用快速中斷模式下的寄存器時(shí),寄存器R8和寄存器R9分別記做R8_fiq和 R9_fiq,當(dāng)使用用戶模式下的寄存器時(shí),寄存器R8和寄存器R9分別記做R8_usr和R9_usr等。在這兩種情況下使用的是不同的物理寄存器,系統(tǒng)沒(méi)有將這幾個(gè)寄存器用于任何的特殊用途。中斷處理非常簡(jiǎn)單,僅僅使用R8~R14寄存器時(shí),F(xiàn)IQ處理程序可以不必執(zhí)行保存和恢復(fù)中斷現(xiàn)場(chǎng)的指令,從而可以使中斷處理過(guò)程很迅速。
          對(duì)于備份寄存器R13、R14來(lái)說(shuō),每個(gè)寄存器對(duì)應(yīng)于6個(gè)不同的物理寄存器,其中的一個(gè)是用戶模式和系統(tǒng)模式共用的,另外的5個(gè)則對(duì)應(yīng)于其他5種處理器模式,采用下面的方法來(lái)標(biāo)識(shí)。
          R13_,
          其中是usr、svc、abt、und、irq和fiq的一種。
          R13通常用做堆棧指針。每一種模式都擁有自己的物理R13。程序初始化R13,使其指向該模式專用的棧地址。當(dāng)進(jìn)入該模式時(shí),可以將需要使用的寄存器保存在R13所指的棧中,當(dāng)退出該模式時(shí),將保存在R13所指的棧中的寄存器值彈出。這樣就實(shí)現(xiàn)了程序的現(xiàn)場(chǎng)保護(hù)。
          寄存器R14又被稱為連接寄存器(LR),在ARM中有下面兩種特殊用途。
          ① 每一種處理器模式在自己的物理R14中存放當(dāng)前子程序的返回地址。當(dāng)通過(guò)BL或者BLX指令調(diào)用子程序時(shí),R14被設(shè)置成該子程序的返回地址。在子程序中,當(dāng)把R14的值復(fù)制到程序計(jì)數(shù)器PC中時(shí),就實(shí)現(xiàn)了子程序返回。
          可以通過(guò)下面兩種方式實(shí)現(xiàn)這種子程序的返回操作。
          ◆執(zhí)行下面任何一條指令
          MOV pc, LR
          BX LR
          ◆在子程序入口使用下面指令將PC保存到棧中:
          STMFD SP!, {registers}, LR}
          相應(yīng)地,下面的指令可以實(shí)現(xiàn)子程序的返回:
          LDMFD SP!, { registers}, LR }
          ② 當(dāng)發(fā)生異常中斷的時(shí)候,該模式下的特定物理R14被設(shè)置成該異常模式將要返回的地址。對(duì)于某些異常,R14的值可能與將返回的地址有一個(gè)常數(shù)的偏移量。具體的返回方式與上面的子程序返回方式基本相同。
          3)程序計(jì)數(shù)器PC→R15
          程序計(jì)數(shù)器R15又被記作PC。它雖然可以作為一般的通用寄存器使用,但是有一些指令在使用R15時(shí)有一些特殊限制。當(dāng)違反了這些限制時(shí),該指令執(zhí)行的結(jié)果將是不可預(yù)料的。
          由于ARM采用了流水線機(jī)制,當(dāng)正確讀取了PC的值時(shí),該值為當(dāng)前指令地址值加8個(gè)字節(jié)。也就是說(shuō),對(duì)于ARM指令集來(lái)說(shuō),PC指向當(dāng)前指令的下兩條指令的地址。由于ARM指令是字對(duì)齊的,PC值的第0位和第1位總為0。
          需要注意的是,當(dāng)使用指令STR/STM保存R15時(shí),保存的可能是當(dāng)前指令地址值加8字節(jié),也可能保存的是當(dāng)前指令地址加12字節(jié)。到底是哪種方式,取決于芯片具體設(shè)計(jì)方式。無(wú)論如何,在同一芯片中,要么采用當(dāng)前指令地址加8,要么采用當(dāng)前指令地址加12,不能有些指令采用當(dāng)前指令地址加8,另一些指令采用當(dāng)前指令地址加12。因此對(duì)于用戶來(lái)說(shuō),盡量避免使用STR/STM指令來(lái)保存R15的值。當(dāng)不可避免這種使用方式時(shí),可以先通過(guò)一些代碼來(lái)確定所用的芯片使用的是哪種實(shí)現(xiàn)方式。
          假設(shè)R0指向可用的一個(gè)內(nèi)存字,下面代碼可以在R0指向的內(nèi)存字中返回該芯片所采用的地址偏移量。
          SUB R1, PC, #4 ;R1中存放下面STR指令的地址
          STR PC, [R0] ;將PC=STR地址+offset保存到R0中
          LDR R0, [R0] ;
          SUB R0, R0, R1 ;offset=PC-STR地址
          2.程序狀態(tài)寄存器
          CPSR(當(dāng)前程序狀態(tài)寄存器)可以在任何處理器模式下被訪問(wèn)。每一種模式下都有一個(gè)專用的物理狀態(tài)寄存器,稱為SPSR(備份程序狀態(tài)寄存器)。當(dāng)特定的異常中斷發(fā)生時(shí),這個(gè)寄存器用于存放當(dāng)前程序狀態(tài)寄存器的內(nèi)容。在異常退出時(shí),可以用 SPSR中保存的值來(lái)恢復(fù)CPSR。CPSR的具體格式如下。
          31
          30
          29
          28
          27
          26
          7
          6
          5
          4
          3
          21
          0
          N
          Z
          C
          V
          Q
          DNMLRAZ
          I
          F
          I
          M4
          M3
          M
          M0
          1)條件標(biāo)志位
          N(Negative)、Z(Zero)、C(Carry)及V(oVerflow)統(tǒng)稱為條件標(biāo)志位。大部分的ARM指令可以依據(jù)CPSR中的這些標(biāo)志位來(lái)選擇性地執(zhí)行。各條件標(biāo)志位的具體含義,如表1-4所示。
          CPSR標(biāo)志位含義
          標(biāo)志位
          N
          本位設(shè)置成當(dāng)前指令運(yùn)算結(jié)果的bit[31]的值
          當(dāng)兩個(gè)補(bǔ)碼表示的有符號(hào)整數(shù)運(yùn)算時(shí),N=1表示運(yùn)算的結(jié)果為負(fù)數(shù),N=0 表示結(jié)果為正數(shù)或零
          Z
          Z=1表示運(yùn)算結(jié)果是0,Z=0表示運(yùn)算結(jié)果不是零
          對(duì)于CMP指令,Z=1表示進(jìn)行比較的兩個(gè)數(shù)大小相等
          C
          在加法指令中(包括比較指令CMN),結(jié)果產(chǎn)生進(jìn)位了,則C=1,表示無(wú)符號(hào)數(shù)運(yùn)算發(fā)生上溢出,其他情況下C=0
          在減法指令中(包括比較指令CMP),結(jié)果產(chǎn)生借位了,則C=0,表示無(wú)符號(hào)數(shù)運(yùn)算發(fā)生下溢出,其他情況下C=1
          對(duì)于包含移位操作的非加/減法運(yùn)算指令,C中包含最后一次被溢出的位的數(shù)值,對(duì)于其他非加/減法運(yùn)算指令,C位的值通常不受影響
          V
          對(duì)于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制的補(bǔ)碼表示的帶符號(hào)數(shù)時(shí),V=1表示符號(hào)位溢出
          其他的指令通常不影響V位
          2)Q標(biāo)志位
          在ARM v5的E系列處理器中,CPSR的bit[27]稱為Q標(biāo)志位,主要用于指示增強(qiáng)的DSP指令是否發(fā)生了溢出,同樣的,SPSR的bit[27]也稱為Q標(biāo)志位,用于在異常中斷發(fā)生時(shí)保存和恢復(fù)CPSR中的Q標(biāo)志位。
          3)CPSR中的控制位
          CPSR的低8位I、F、T及M[4:0]統(tǒng)稱為控制位,當(dāng)異常中斷發(fā)生時(shí)這些位發(fā)生變化。在特權(quán)級(jí)的處理器模式下,軟件可以修改這些控制位。
          ① I中斷禁止位
          當(dāng)I=1時(shí)禁止IRQ中斷。
          當(dāng)F=1時(shí)禁止FIQ中斷。
          通常一旦進(jìn)入中斷服務(wù)程序可以通過(guò)置位I和F來(lái)禁止中斷,但是在本中斷服務(wù)程序退出前必須恢復(fù)原來(lái)I、F位的值。
          ② T控制位,用來(lái)控制指令執(zhí)行的狀態(tài),即說(shuō)明本指令是ARM指令還是Thumb指令。對(duì)于不同版本的ARM處理器,T控制位的含義是有些不同的。
          對(duì)于ARM v3及更低的版本和ARM v4的非T系列版本的處理器,沒(méi)有ARM和Thumb指令的切換,所以T始終為0。
          對(duì)于ARM v4及更高版本的T系列處理器,T控制位含義如下。
          當(dāng)T=0,表示執(zhí)行ARM指令。
          當(dāng)T=1,表示執(zhí)行Thumb指令。
          對(duì)于ARM v5及更高的版本的非T系列處理器,T控制位的含義如下。
          當(dāng)T=0表示執(zhí)行ARM指令。
          當(dāng)T=1表示強(qiáng)制下一條執(zhí)行的指令產(chǎn)生為定義指令中斷。
          ③ M 控制位
          控制位M[4:0]稱為處理器模式標(biāo)識(shí)位,具體說(shuō)明如表1-5所示。
          表CPSR 處理器模式位
          M[4:0]
          處理器模式
          可訪問(wèn)的寄存器
          0b10000
          User
          PC,R14~R0,CPSR
          0b10001
          FIQ
          PC,R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq
          0b10010
          IRQ
          PC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq
          0b10011
          Supervisor
          PC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc
          0b10111
          Abort
          PC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt
          0b11011
          Undefined
          PC,R14_und~R13_und,R12~R0,CPSR,SPSR_und
          0b11111
          System
          PC,R14~R0,CPSR(ARM v4及更高版本)
          ④CPSR的其他位用于將來(lái)ARM版本的擴(kuò)展,程序可以先不操作這些位。



          關(guān)鍵詞: ARM寄存器簡(jiǎn)

          評(píng)論


          技術(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); })();