• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            統(tǒng)計

            • 隨筆 - 50
            • 文章 - 42
            • 評論 - 147
            • 引用 - 0

            留言簿(6)

            隨筆分類

            文章分類

            Link

            搜索

            •  

            積分與排名

            • 積分 - 164634
            • 排名 - 159

            最新評論

            閱讀排行榜

            評論排行榜

            ARM寄存器介紹
            ARM處理器共有37個寄存器。其中包括:31個通用寄存器,包括程序計數(shù)器(PC)在內(nèi)。這些寄存器都是32位寄存器。以及632位狀態(tài)寄存器。但目前只使用了其中12位。ARM處理器共有7種不同的處理器模式,在每一種處理器模式中有一組相應(yīng)的寄存器組。任意時刻(也就是任意的處理器模式下),可見的寄存器包括15個通用寄存器(R0R14)、一個或兩個狀態(tài)寄存器及程序計數(shù)器(PC)。在所有的寄存器中,有些是各模式共用的同一個物理寄存器;有一些寄存器是各模式自己擁有的獨(dú)立的物理寄存器。表1列出了各處理器模式下可見的寄存器情況。
             
            1  各種處理器模式下的寄存器
            用戶模式
            系統(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
            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_inq
            R13_fiq
            R14
            R14
            R14_svc
            R14_abt
            R14_und
            R14_inq
            R14_fiq
            PC
            PC
            PC
            PC
            PC
            PC
            PC
            CPSR
            CPSR
            CPSR
            SPSR_svc
            CPSR
            SPSR_abt
            CPSR
            SPSR_und
            CPSR
            SPSR_inq
            CPSR
            SPSR_fiq
             

            通用寄存器

            通用寄存器可以分為下面3類:未備份寄存器(The unbanked registers),包括R0R7。備份寄存器(The banked registers),包括R8R14。程序計數(shù)器PC,即R15

            未備份寄存器

            未備份寄存器包括R0R7。對于每一個未備份寄存器來說,在所有的處理器模式下指的都是同一個物理寄存器。在異常中斷造成處理器模式切換時,由于不同的處理器模式使用相同的物理寄存器,可能造成寄存器中數(shù)據(jù)被破壞。未備份寄存器沒有被系統(tǒng)用于特別的用途,任何可采用通用寄存器的應(yīng)用場合都可以使用未備份寄存器。

            備份寄存器

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

            程序計數(shù)器R15

            程序計數(shù)器R15又被記作PC。它雖然可以作為一般的通用寄存器使用,但是有一些指令在使用R15時有一些特殊限制。當(dāng)違反了這些限制時,該指令執(zhí)行的結(jié)果將是不可預(yù)料的。
            由于ARM采用了流水線機(jī)制,當(dāng)正確讀取了PC的值時,該值為當(dāng)前指令地址值加8個字節(jié)。也就是說,對于ARM指令集來說,PC指向當(dāng)前指令的下兩條指令的地址。
            由于ARM指令是字對齊的,PC值的第0位和第1位總為0。需要注意的是,當(dāng)使用指令STRSTM保存R15時,保存的可能是當(dāng)前指令地址值加8字節(jié),也可能保存的是當(dāng)前指令地址加12字節(jié)。到底是哪種方式,取決于芯片具體設(shè)計方式。無論如何,在同一芯片中,要么采用當(dāng)前指令地址加8,要么采用當(dāng)前指令地址加12,不能有些指令采用當(dāng)前指令地址加8,另一些指令采用當(dāng)前指令地址加12。因此對于用戶來說,盡量避免使用STRSTM指令來保存R15的值。當(dāng)不可避免這種使用方式時,可以先通過一些代碼來確定所用的芯片使用的是哪種實現(xiàn)方式。
            對于ARM版本4以及更高的版本,程序必須保證寫入R15寄存器的地址值的bits[10]0b00;否則將會產(chǎn)生不可預(yù)知的結(jié)果。
            對于Thumb指令集來說,指令是半字對齊的。處理器將忽略bit[0],即寫入R15的地址值首先與0XFFFFFFFC做與操作,再寫入R15中。
            還有—些指令對于R15的用法有一些特殊的要求。比如,指令BX利用bit[0]來確定是ARM指令,還是Thumb指令。這種讀取PC值和寫入PC值的不對稱的操作需要特別注意。

            程序狀態(tài)寄存器

            CPSR(當(dāng)前程序狀態(tài)寄存器)可以在任何處理器模式下被訪問。它包含了條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志以及其他的一些控制和狀態(tài)位。每一種處理器模式下都有一個專用的物理狀態(tài)寄存器,稱為SPSR(備份程序狀態(tài)寄存器)。當(dāng)特定的異常中斷發(fā)生時,這個寄存器用于存放當(dāng)前程序狀態(tài)寄存器的內(nèi)容。在異常中斷程序退出時,可以用SPSR中保存的值來恢復(fù)CPSR
            由于用戶模式和系統(tǒng)模式不是異常中斷模式,所以它們沒有SPSR。當(dāng)在用戶模式或系統(tǒng)模式中訪問SPSR,將會產(chǎn)生不可預(yù)知的結(jié)果。
            CPSR的格式如下所示。SPSR格式與CPSR格式相同。
            31
            30
            29
            28
            27
            26
            7
            6
            5
            4
            3
            2
            1
            0
            N
            Z
            C
            V
            Q
            DNM(RAZ)
            I
            F
            T
            M4
            M3
            M2
            M1
            M0
             

            條件標(biāo)志位

            N(Negative)Z(Zero)C(Carry)V(oVerflow)統(tǒng)稱為條件標(biāo)志位。大部分的ARM指令可以根據(jù)CPSR中的這些條件標(biāo)志位來選擇性地執(zhí)行。各條件標(biāo)志位的具體含義如表2所示。
             
            2 CPSR中的條件標(biāo)志位
            標(biāo)志位 
             
            N
            本位設(shè)置成當(dāng)前指令運(yùn)算結(jié)果的bit[31)的值
            當(dāng)兩個補(bǔ)碼表示的有符號整數(shù)運(yùn)算時,N=I表示運(yùn)算的結(jié)果為負(fù)數(shù);N=0表示結(jié)果為正數(shù)或零
            Z
            Z=1表示運(yùn)算的結(jié)果為零;Z=0表示運(yùn)算的結(jié)果不為零。
            對于CMP指令,Z=1表示進(jìn)行比較的兩個數(shù)大小相等。
            下面分4種情況討論C的設(shè)置方法:
            在加法指令中(包括比較指令CMN),當(dāng)結(jié)果產(chǎn)生了進(jìn)位,則C=1,表示無符號數(shù)運(yùn)算發(fā)生上溢出;其他情況下C=0
            在減法指令中(包括比較指令CMP),當(dāng)運(yùn)算中發(fā)生借位則C=0表示無符號數(shù)運(yùn)算發(fā)生下溢出;其他情況下C=1
            對于包含移位操作的非加/減法運(yùn)算指令,C中包含最后一次溢出的位數(shù)數(shù)值。
            對于其他非加/減法運(yùn)算指令,C位的值通常不受影響。
            對于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制的補(bǔ)碼表示的帶符號數(shù)時V1表示符號位溢出。
            通常其他的指令不影響V位,具體可參考各指令的說明。
             

            Q標(biāo)志位

            ARMv5E系列處理器中,CPSRbit[27]稱為Q標(biāo)志位,主要用于指示增強(qiáng)的
            DSP指令是否發(fā)生了溢出。同樣的SPSR中的bit[27]也稱為Q標(biāo)志位,用于在異常中斷發(fā)生時保存和恢復(fù)CPSR中的Q標(biāo)志位。
            ARM v5以前的版本及ARM v5的非E系列的處理器中,Q標(biāo)志位沒有被定義。CPSRbit[27]屬于DNM(RAZ)

            CPSR中的控制位

            CPSR的低8IFTM[40]統(tǒng)稱為控制位。當(dāng)異常中斷發(fā)生時這些位發(fā)生變化。在特權(quán)級的處理器模式下,軟件可以修改這些控制位。
            1)      中斷禁止位
            當(dāng)I=1時禁止IRQ中斷。
            當(dāng)F=1時禁止FIQ中斷。
            2)      T控制位   
            T控制位用于控制指令執(zhí)行的狀態(tài),即說明本指令是ARM指令,還是Thumb指令。對與不同版本的ARM處理器,T控制位的含義不同。對于ARMv4以及更高版本的T系列的ARM處理器,
            T=0表示執(zhí)行ARM指令。
            T=1表示執(zhí)行Thumb指令。
            對于ARMv5以及更高的版本的非T系列的ARM處理器,T控制位含義如下:
            T=0表示執(zhí)行ARM指令。
            T=1表示強(qiáng)制下一條執(zhí)行的指令產(chǎn)生未定義指令中斷。
            3)      M控制位
            控制位M[40]控制處理器模式,具體含義如表3所示。
            3控制位M[40] 的含義
            M[40]
            處理器模式
            可訪問的寄存器
            0b10000
            User  
            PCR14R0CPSR
            0b10001
            FIQ   
            PCR14_fiq-R8_flqR7~R0CPSRSPSR_nq
            0b10010
            1RQ
            PCR14 _irq-R13 _irqR12R0CPSRSPSR_ irq
            0b10011
            Supervisor
            PCR14_ svc-R13 _svcR12R0CPSRSPSR_svc
            0b10111
            Abort
            PCR14_abt-R13_abtR12R0CPSRSPSR_abt
            0b11011
            Undefined
            PCR14_und-R13_undR12~R0CPSRSPSR_ und
             
             
             
             

            CPSR中的其他位

            CPSR中的其他位用于將來ARM版本的擴(kuò)展。應(yīng)用軟件不要操作這些位,以免與ARM將來版本的擴(kuò)展沖突。

            ARM體系中的存儲空間

            ARM體系使用單—的平板地址空間。該地址空間的大小為2328位字節(jié)。這些字節(jié)單元的地址是一個無符號的32位數(shù)值,其取值范圍為02321ARM的地址空間也可以看作是23232位的字單元。這些字單元的地址可以被4整除,也就是說該地址的低兩位為0b00。地址為A的字?jǐn)?shù)據(jù)包括地址為AAIA2A34個字節(jié)單元的內(nèi)容。
            ARM版本4及以上的版本中,ARM的地址空間也可以看作是23116位的半字單元。這些半字單元的地址可以被2整除,也就是說該地址的最低位為0b0。地址為A的半字?jǐn)?shù)據(jù)包括地址為AA1兩個字節(jié)單元的內(nèi)容。
            各存儲單元的地址作為32位的無符號數(shù),可以進(jìn)行常規(guī)的整數(shù)運(yùn)算。這些運(yùn)算的結(jié)果進(jìn)行232取模。也就是說,運(yùn)算結(jié)果發(fā)生上溢出和下溢出時,地址將會發(fā)生卷繞。

            ARM存儲器格式

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

            ARM處理器包含多少寄存器?每種模式下又有那些寄存器?這些寄存器的作用又是什么?帶著這些問題我們來學(xué)習(xí)ARM寄存器吧!相信看完這篇文章后你會有所收獲。
            ARM處理器共有37個寄存器。
            它包含31個通用寄存器和6個狀態(tài)寄存器。

            =======================================================================================
            Usr         System         Supervisor      Abort         Undefined         IRQ           FIQ
            ----------------------------------------------------------------------------------------------------------------
            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
            =======================================================================================
            1.通用寄存器的分類:
            a.未備份寄存器,包括R0-R7
                對每個未備份寄存器來說,在所有的模式下都是指同一個物理寄存器(例如:Usr下的R0與FIQ下的R0是同一個寄存器)。在異常程序中斷造成模式切換時,由于不同模式使用的是相同的物理寄存器。這可能導(dǎo)致數(shù)據(jù)遭到破壞。未備份寄存器沒有被系統(tǒng)作為別的用途,任何場合均可采用未備份寄存器。
            b.備份寄存器,包括R8-R14
                對于備份寄存器R8-R12來說,除FIQ模式下其它模式均使用相同的物理寄存器。在FIQ模式下R8_fiq,R9_fiq,
            R10_fiq,R11_fiq,R12_fiq。它有自己的物理寄存器。
                對于R13和R14寄存器每種模式都有自己的物理寄存器(System與Usr的寄存器相同)當(dāng)異常中斷發(fā)生時,系統(tǒng)使用相應(yīng)模式下的物理寄存器,從而可以避免數(shù)據(jù)遭到破壞。
               R13也稱為SP堆棧指針。
               R14也稱為LR寄存器
            c.程序計數(shù)器,PC
               PC寄存器存儲指令地址,由于ARM采用流水機(jī)制執(zhí)行指令,故PC寄存器總是存儲下一條指令的地址。
               由于ARM是按照字對齊故PC被讀取后的值的bit[1:0]總是0b00(thumb的bit[0]是0b0)。

            2.程序狀態(tài)寄存器
            程序狀態(tài)寄存器包含當(dāng)前程序狀態(tài)寄存器和備份狀態(tài)寄存器。
            a.CPSR(程序狀態(tài)寄存器)
            CPSR在任何處理器模式下都可以被訪問。其結(jié)構(gòu)如下:

              31 30 29 28  ---   7   6   -   4   3   2   1   0
              N  Z  C  V         I   F       M4  M3  M2  M1  M0

            N(Negative)、Z(Zero)、C(Carry)以及V(oVerflow)稱為條件標(biāo)志位。ARM指令根據(jù)CPSR的條件標(biāo)志位來選擇地執(zhí)行。

            CPSR條件標(biāo)志位
            =======================================================================================
            條件標(biāo)志位                   含義
            ----------------------------------------------------------------------------------------------------------------
            N                            N=1 表示運(yùn)算結(jié)果為負(fù)數(shù),N=0 表示運(yùn)算結(jié)果為正數(shù)。              
            Z                            Z=1 表示運(yùn)算結(jié)果為0, Z=0 表示運(yùn)算結(jié)果為非零。
            C                            C=1 表示運(yùn)算結(jié)果產(chǎn)生了進(jìn)位。
            V                            V=1 運(yùn)算結(jié)果的符號位發(fā)生了溢出。
            Q                            在ARMv5 E系列版本中Q=1 表示DSP指令溢出。
                                         在ARMv5以前的版本中沒有Q標(biāo)志位。
            =======================================================================================
            以下指令會影響CPSR的條件標(biāo)志位
            (1)比較指令,如: CMP、CMN、TEQ、TST等。
            (2)當(dāng)一些算術(shù)邏輯運(yùn)算的目標(biāo)寄存器不是PC時,這些指令會影響CPSR的條件標(biāo)志位。
            (3)MSR與MRS指令可以對CPSR/SPSR進(jìn)行操作。
            (4)LDM指令可以將SPSR復(fù)制到CPSR中。

            CPSR的控制位
            =======================================================================================
            控制位                        含義
            ----------------------------------------------------------------------------------------------------------------
            I                             I=1 禁用IRO中斷
            F                             F=1 禁用FIQ中斷
            T                             ARMv4以上T版本T=0 執(zhí)行ARM指令,T=1執(zhí)行Thumb指令。
                                          ARMv5以上非T版本T=0 執(zhí)行ARM指令,T=1表示下一條指令產(chǎn)生未定義指令中斷。M[4:0]                        控制處理器模式
                                          0b10000      User
                                          0b10001      FIQ
                                          0b10010      IRQ
                                          0b10011      Supervisor
                                          0b10111      Abort
                                          0b11011      Undefined
                                          0b11111      System     
            =======================================================================================
            b.SPSR(備份狀態(tài)寄存器)
            SPSR的結(jié)構(gòu)與CPSR的結(jié)構(gòu)相同,SPSR是用來備份CPSR的。
            現(xiàn)在你對ARM處理器的寄存器有一些了解了吧?

            posted on 2009-11-18 21:55 pear_li 閱讀(2350) 評論(0)  編輯 收藏 引用 所屬分類: Linux/Unix

            久久亚洲中文字幕精品一区| 久久午夜无码鲁丝片秋霞| 伊人丁香狠狠色综合久久| 久久精品国产亚洲精品| 久久久久高潮综合影院| 国产99精品久久| 2021国产精品午夜久久| 久久久久四虎国产精品| 欧美久久久久久| 99久久精品免费国产大片| 久久综合亚洲色一区二区三区| 久久99中文字幕久久| 精品久久久久久无码不卡| 国产亚洲精久久久久久无码AV| 亚洲综合伊人久久综合| 久久精品99无色码中文字幕| 久久国产高潮流白浆免费观看| 无码人妻少妇久久中文字幕| 国产精品美女久久久久网| 午夜人妻久久久久久久久| 欧美精品丝袜久久久中文字幕| 久久精品国产半推半就| 久久亚洲精精品中文字幕| 麻豆久久久9性大片| 国产精品成人久久久久久久| 国产精品女同久久久久电影院| 2021国产精品久久精品| 亚洲中文字幕伊人久久无码| 久久AAAA片一区二区| 国内精品伊人久久久久影院对白| 粉嫩小泬无遮挡久久久久久| 欧洲精品久久久av无码电影| 久久久久久精品免费看SSS| 欧美伊人久久大香线蕉综合| 亚洲国产成人精品女人久久久 | 97精品伊人久久大香线蕉| 久久精品无码免费不卡| 久久久久无码专区亚洲av| 精品视频久久久久| 久久精品综合一区二区三区| 久久久精品人妻无码专区不卡|