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

          新聞中心

          ARM寄存器小結(jié)

          作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò) 收藏
          ARM微處理器支持7種運(yùn)行模式,分別為:

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

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

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

          器總結(jié):
          ARM有16個(gè)32位的寄存器(r0到r15)。
          r15充當(dāng)程序寄存器PC,r14(link register)存儲(chǔ)子程序的返回地址,r13存儲(chǔ)的是堆棧地址。
          ARM有一個(gè)當(dāng)前程序狀態(tài)寄存器:CPSR。
          一些寄存器(r13,r14)在異常發(fā)生時(shí)會(huì)產(chǎn)生新的instances,比如IRQ處理器模式,這時(shí)處理器使用r13_irq和r14_irq
          ARM的子程序調(diào)用是很快的,因?yàn)樽映绦虻姆祷氐刂凡恍枰娣旁诙褩V小?/p>


          1、ARM處理器共有37個(gè)寄存器,其中包括:

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

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

          2、ARM處理器有7種不同的處理器模式,在每一種處理器模式中有一組相應(yīng)的寄存器組。任意時(shí)刻(也就是任意的處理器模式下),可見的寄存器包括15個(gè)通用寄存器(R0~R14)、一個(gè)或兩個(gè)狀態(tài)寄存器及程序計(jì)數(shù)器(PC)。在所有的寄存器中,有些是各模式共用的同一個(gè)物理寄存器,有些是各模式自己擁有的獨(dú)立的物理寄存器。

          3、 通用寄存器可以分為3類:未備份寄存器(R0~R7)、備份寄存器(R8~R14)和程序計(jì)數(shù)器PC(R15)。對(duì)于每一個(gè)未備份寄存器來(lái)說(shuō),在所有的處理器模式下指的都是同一個(gè)物理寄存器。對(duì)應(yīng)備份寄存器R8~R12來(lái)說(shuō),每個(gè)寄存器對(duì)應(yīng)兩個(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種處理器模式。

          4、每一種異常模式擁有自己的物理的R13。應(yīng)用程序初始化該R13,使其指向該異常模式專用的棧地址。當(dāng)進(jìn)入異常模式時(shí),可以將需要使用的寄存器保存在R13所指的棧中;當(dāng)退出異常處理程序時(shí),將保存在R13所指的棧中的寄存器值彈出。這樣就使異常處理程序不會(huì)破壞被其中斷程序的運(yùn)行現(xiàn)場(chǎng)。

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

          i. 每一種處理器模式自己的物理R14中存放當(dāng)前子程序的返回地址。當(dāng)通過(guò)BL或BLX指令調(diào)用子程序時(shí),R14被設(shè)置成該子程序的返回地址。在子程序中,當(dāng)把R14的值復(fù)制到程序計(jì)數(shù)器PC中時(shí),子程序即返回。

          ii.當(dāng)異常中斷發(fā)生時(shí),該異常模式特定的物理R14被設(shè)置成該異常模式將要返回的地址,對(duì)于有些異常模式,R14的值可能與將返回的地址有一個(gè)常數(shù)的偏移量。具體的返回方式與子程序返回方式基本相同。

          6、由于ARM采用了流水線機(jī)制,當(dāng)正確讀取了PC的值時(shí),該值為當(dāng)前指令地址值加8個(gè)字節(jié)。也就是說(shuō),對(duì)于ARM指令集來(lái)說(shuō),PC指向當(dāng)前指令的下兩條指令的地址,由于ARM指令是字節(jié)對(duì)齊的,PC值得第0位和第1位總為0。

          7、 對(duì)于ARM版本3以及更低的版本,寫入R15的地址值的bits[1:0]被忽略,對(duì)于ARM版本4以及更高的版本,程序必須保證寫入R15寄存器的地址值的bits[1:0]為0b00;否則會(huì)產(chǎn)生不可預(yù)知的結(jié)果。對(duì)于Thumb指令集來(lái)說(shuō),指令是半字對(duì)齊的。處理器將忽略bit[0]。

          還有一些指令對(duì)于R15的用法有一些特殊的要求。比如,指令BX利用bit[0]來(lái)確定是ARM指令,還是Thumb指令。

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

          9、 每一種處理器模式下都有一個(gè)專用的物理狀態(tài)寄存器,稱為SPSR(備份程序狀態(tài)寄存器)。當(dāng)特定的異常中斷發(fā)生時(shí),這個(gè)寄存器用于存放當(dāng)前程序狀態(tài)寄存器的內(nèi)容。在異常中斷程序退出時(shí),可以用SPSR中保存的值來(lái)恢復(fù)CPSR。

          10、 由于用戶模式和系統(tǒng)模式不是異常中斷模式,所以它們沒(méi)有SPSR。當(dāng)在用戶模式或系統(tǒng)模式中 訪問(wèn)SPSR,將會(huì)產(chǎn)生不可預(yù)知的結(jié)果。

          -----------------------------------------------------------------------------------------------------

          ARM處理器共有37個(gè)寄存器。其中包括:31個(gè)通用寄存器,包括程序計(jì)數(shù)器(PC)在內(nèi)。這些寄存器都是32位寄存器。以及6個(gè)32位狀態(tài)寄存器。但目前只使用了其中12位。ARM處理器共有7種不同的處理器模式,在每一種處理器模式中有一組相應(yīng)的寄存器組。任意時(shí)刻(也就是任意的處理器模式下),可見的寄存器包括15個(gè)通用寄存器(R0~R14)、一個(gè)或兩個(gè)狀態(tài)寄存器及程序計(jì)數(shù)器(PC)。

          表1各種處理器模式下的寄存器
          用戶模式系統(tǒng)模式特權(quán)模式中止模式未定義指令模式外部中斷模式快速中斷模式
          R0R0R0R0R0R0R0
          R1R1R1R1R1R1R1
          R2R2R2R2R2R2R2
          R3R3R3R3R3R3R3
          R4R4R4R4R4R4R4
          R5R5R5R5R5R5R5
          R6R6R6R6R6R6R6
          R8R8R8R8R8R8R8_fiq
          R9R9R9R9R9R9R9_fiq
          R10R10R10R10R10R10R10_fiq
          R11R11R11R11R11R11R11_fiq
          R12R12R12R12R12R12R12_fiq
          R13R13R13_svcR13_abtR13_undR13_inqR13_fiq
          R14R14R14_svcR14_abtR14_undR14_inqR14_fiq
          PCPCPCPCPCPCPC
          CPSRCPSR
          CPSR
          SPSR_svc
          CPSR
          SPSR_abt
          CPSR
          SPSR_und
          CPSR
          SPSR_inq
          CPSR
          SPSR_fiq

          未備份寄存器包括R0~R7。對(duì)于每一個(gè)未備份寄存器來(lái)說(shuō),在所有的處理器模式下指的都是同一個(gè)物理寄存器。未備份寄存器沒(méi)有被系統(tǒng)用于特別的用途,任何可采用通用寄存器的應(yīng)用場(chǎng)合都可以使用未備份寄存器。

          對(duì)于備份寄存器R8~R12來(lái)說(shuō),每個(gè)寄存器對(duì)應(yīng)兩個(gè)不同的物理寄存器。系統(tǒng)沒(méi)有將這幾個(gè)寄存器用于任何的特殊用途,但是當(dāng)中斷處理非常簡(jiǎn)單,僅僅使用R8~R14寄存器時(shí),F(xiàn)IQ處理程序可以不必執(zhí)行保存和恢復(fù)中斷現(xiàn)場(chǎng)的指令,從而可以使中斷處理過(guò)程非常迅速。對(duì)于備份寄存器R13和R14,每個(gè)寄存器對(duì)應(yīng)6個(gè)不同的物理寄存器,其中的一個(gè)是用戶模式和系統(tǒng)模式共用的;另外的5個(gè)對(duì)應(yīng)于其他5種處理器模式。采用記號(hào)R13_來(lái)區(qū)分各個(gè)物理寄存器:其中,可以是下面幾種模式之一:usr、svc、abt、und、irq及fiq。
          寄存器R13在ARM中常用作棧指針。在ARM指令集中,這只是一種習(xí)慣的用法,并沒(méi)有任何指令強(qiáng)制性的使用R13作為棧指針,用戶也可以使用其他的寄存器作為棧指針;而在Thumb指令集中,有一些指令強(qiáng)制性地使用R13作為棧指針。每一種異常模式擁有自己的物理的R13。應(yīng)用程序初始化該R13,使其指向該異常模式專用的棧地址。當(dāng)進(jìn)入異常模式時(shí),可以將需要使用的寄存器保存在R13所指的棧中;當(dāng)退出異常處理程序時(shí),將保存在R13所指的棧中的寄存器值彈出。這樣就使異常處理程序不會(huì)破壞被其中斷程序的運(yùn)行現(xiàn)場(chǎng)。
          寄存器R14又被稱為連接寄存器(Link Register,LR),在ARM體系中具有下面兩種特殊的作用:1、每一種處理器模式自己的物理R14中存放在當(dāng)前子程序的返回地址。當(dāng)通過(guò)BL或BLX指令調(diào)用子程序時(shí),R14被設(shè)置成該子程序的返回地址。在子程序中,當(dāng)把R14的值復(fù)制到程序計(jì)數(shù)器PC中時(shí),子程序即返回。2、當(dāng)異常中斷發(fā)生時(shí),該異常模式特定的物理R14被設(shè)置成該異常模式將要返回的地址,對(duì)于有些異常模式,R14的值可能與將返回的地址有一個(gè)常數(shù)的偏移量。具體的返回方式與上面的子程序返回方式基本相同。R14寄存器也可以作為通用寄存器使用。

          由于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)方式。
          對(duì)于ARM版本4以及更高的版本,程序必須保證寫入R15寄存器的地址值的bits[1:0]為0b00;否則將會(huì)產(chǎn)生不可預(yù)知的結(jié)果。對(duì)于Thumb指令集來(lái)說(shuō),指令是半字對(duì)齊的,處理器將忽略bit[0]。即寫入R15的地址值首先與0XFFFFFFFC做與操作,再寫入R15中。
          還有—些指令對(duì)于R15的用法有一些特殊的要求。比如,指令BX利用bit[0]來(lái)確定是ARM指令,還是Thumb指令。這種讀取PC值和寫入PC值的不對(duì)稱的操作需要特別注意。
          需要注意的是,當(dāng)使用str/stm保存R15時(shí),保存的可能是當(dāng)前指令地址值加8個(gè)字節(jié),也可能保存的是當(dāng)前指令地址值加12個(gè)字節(jié)。到底哪種方式取決于芯片的具體設(shè)計(jì)。對(duì)于用戶來(lái)說(shuō),盡量避免使用STR/STM指令來(lái)保存R15的值。
          當(dāng)成功的向R15寫入一個(gè)數(shù)值時(shí),程序?qū)⑻D(zhuǎn)到該地址執(zhí)行。由于ARM指令是字對(duì)齊的,寫入R15的值應(yīng)滿足bits[1:0]為0b00,具體要求arm各版本有所不同:
          **對(duì)于arm3以及更低的版本,寫入R15的地址值bits[1:0]被忽略,即寫入r15的地址值將與0xFFFF FFFC做與操作。
          **對(duì)于ARM4以及更高的版本,程序必須保證寫入R15的地址值bits[1:0]為0b00,否則將產(chǎn)生不可預(yù)知的后果。
          對(duì)于Thumb指令集來(lái)說(shuō),指令是半字對(duì)齊的,處理器將忽略bit[0]。

          CPSR(當(dāng)前程序狀態(tài)寄存器)可以在任何處理器模式下被訪問(wèn)。它包含了條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志以及其他的一些控制和狀態(tài)位。

          每一種處理器模式下都有一個(gè)專用的物理狀態(tài)寄存器,稱為SPSR(備份程序狀態(tài)寄存器)。當(dāng)特定的異常中斷發(fā)生時(shí),這個(gè)寄存器用于存放當(dāng)前程序狀態(tài)寄存器的內(nèi)容。在異常中斷程序退出時(shí),可以用SPSR中保存的值來(lái)恢復(fù)CPSR。由于用戶模式和系統(tǒng)模式不是異常中斷模式,所以它們沒(méi)有SPSR。當(dāng)在用戶模式或系統(tǒng)模式中訪問(wèn)SPSR,將會(huì)產(chǎn)生不可預(yù)知的結(jié)果。
          CPSR的格式如下所示。SPSR格式與CPSR格式相同。
          31302928272676543210
          NZCVQDNM(RAZ)IFTM4M3M2M1
          M0

          ARM體系使用單—的平板地址空間。該地址空間的大小為232個(gè)8位字節(jié)。這些字節(jié)單元的地址是一個(gè)無(wú)符號(hào)的32位數(shù)值,其取值范圍為0到232—1。ARM的地址空間也可以看作是230個(gè)32位的字單元。這些字單元的地址可以被4整除,也就是說(shuō)該地址的低兩位為0b00。地址為A的字?jǐn)?shù)據(jù)包括地址為A、A+I(xiàn)、A+2、A+3,4個(gè)字節(jié)單元的內(nèi)容。
          在ARM版本4及以上的版本中,ARM的地址空間也可以看作是231個(gè)16位的半字單元。這些半字單元的地址可以被2整除,也就是說(shuō)該地址的最低位為0b0。地址為A的半字?jǐn)?shù)據(jù)包括地址為A、A+1兩個(gè)字節(jié)單元的內(nèi)容。
          各存儲(chǔ)單元的地址作為32位的無(wú)符號(hào)數(shù),可以進(jìn)行常規(guī)的整數(shù)運(yùn)算。這些運(yùn)算的結(jié)果進(jìn)行232取模。也就是說(shuō),運(yùn)算結(jié)果發(fā)生上溢出和下溢出時(shí),地址將會(huì)發(fā)生卷繞。

          在ARM體系中,每個(gè)字單元中包含4個(gè)字節(jié)單元或者兩個(gè)半字單元:1個(gè)半字單元中包含兩個(gè)字節(jié)單元。但是在字單元中,4個(gè)字節(jié)哪一個(gè)是高位字節(jié),哪一個(gè)是低位字節(jié)則有兩種不同的格式:big-endian格式和little-endian格式。
          在big-endian格式中,對(duì)于地址為A的字單元包括字節(jié)單元A、A+1、A+2及A+3,其中字節(jié)單元由高位到低位字節(jié)順序?yàn)锳、A+1、A+2、A+3;地址為A的字單元包括半字單元A、A+2,其中半字單元由高位到低位字節(jié)順序?yàn)锳、A+2:地址為A的半字單元包括字節(jié)單元A、A+1,其中字節(jié)單元由高位到低位字節(jié)順序?yàn)锳、A+1。
          在little-endian格式中,地址為A的字單元包括字節(jié)單元A、A+1、A+2及A+3,其中字節(jié)單元由高位到低位字節(jié)順序?yàn)锳+3、A+2、A+1、A;地址為A的字單元包括半字節(jié)單元A、A+2,其中半字單元由高位到低位字節(jié)順序?yàn)锳+2、A;地址為A的半字單元包括字節(jié)單元A、A+1,其中字節(jié)單元由高位到低位字節(jié)順序?yàn)锳+1、A



          關(guān)鍵詞: ARM寄存

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