新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM微處理器的編程模型之:ARM寄存器組織

        ARM微處理器的編程模型之:ARM寄存器組織

        作者: 時間:2013-09-13 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257086.htm

        1.未

        包括r0~r7。顧名思義,在所有處理器模式下對于每一個未來說,指的都是同一個物理寄存器。未分組寄存器沒有被系統用于特殊的用途,任何可采用通用寄存器的應用場合都可以使用未分組寄存器。但由于其通用性,在異常中斷所引起的處理器模式切換時,其使用的是相同的物理寄存器,所以也就很容易使寄存器中的數據被破壞。

        2. 分組寄存器

        r8~r14是分組寄存器,它們每一個訪問的物理寄存器取決于當前的處理器模式。

        對于這些分組寄存器r8~r12來說,每個寄存器對應兩個不同的物理寄存器。一組用于除FIQ模式外的所有處理器模式,而另一組則專門用于FIQ模式。這樣的結構設計有利于加快FIQ的處理速度。不同模式下寄存器的使用,要使用寄存器名后綴加以區分,例如,當使用FIQ模式下的寄存器時,寄存器r8和寄存器r9分別記做r8_fiq, r9_fiq;當使用用戶模式下的寄存器時,寄存器r8和r9分別記做r8_usr, r9_usr等。在體系結構中,r8~r12沒有任何指定的其他的用途,所以當FIQ中斷到達時,不用保存這些通用寄存器,也就是說FIQ處理程序可以不必執行保存和恢復中斷現場的指令,從而可以使中斷處理過程非常迅速。所以FIQ模式常被用來處理一些時間緊急的任務,如DMA處理。

        對于分組寄存器r13和r14來說,每個寄存器對應6個不同的物理寄存器。其中的一個是用戶模式和系統模式公用的,而另外5個分別用于5種異常模式。訪問時需要指定它們的模式。名字形式如下:

        · r13_mode>

        · r14_mode>

        其中mode>可以是以下幾種模式之一:usr、svc、abt、und、irp及fiq。

        r13寄存器在中常用作堆棧指針,稱為SP。當然,這只是一種習慣用法,并沒有任何指令強制性的使用r13作為堆棧指針,用戶完全可以使用其他寄存器作為堆棧指針。而在Thumb指令集中,有一些指令強制性的將r13作為堆棧指針,如堆棧操作指令。

        每一種異常模式擁有自己的r13。異常處理程序負責初始化自己的r13,使其指向該異常模式專用的棧地址。在異常處理程序入口處,將用到的其他寄存器的值保存在堆棧中,返回時,重新將這些值加載到寄存器。通過這種保護程序現場的方法,異常不會破壞被其中斷的程序現場。

        寄存器r14又被稱為(Link Register,LR),在體系結構中具有下面兩種特殊的作用。

        (1)每一種處理器模式用自己的r14存放當前子程序的返回地址。當通過BL或BLX指令調用子程序時,r14被設置成該子程序的返回地址。在子程序返回時,把r14的值復制到PC。典型的做法是使用下列兩種方法之一。

        · 執行下面任何一條指令。

        MOV PC, LR

        BX LR

        · 在子程序入口處使用下面的指令將PC保存到堆棧中。

        STMFD SP!, {register>,LR}

        在子程序返回時,使用如下相應的配套指令返回。

        LDMFD SP!, {register>,PC}

        (2)當異常中斷發生時,該異常模式特定的物理寄存器r14被設置成該異常模式的返回地址,對于有些模式r14的值可能與返回地址有一個常數的偏移量(如數據異常使用SUB PC, LR,#8返回)。具體的返回方式與上面的子程序返回方式基本相同,但使用的指令稍微有些不同,以保證當異常出現時正在執行的程序的狀態被完整保存。

        R14也可以被用作通用寄存器使用。

        注意

        當嵌套中斷被允許時(即異常可重入),r13和r14的使用要特別小心。例如,在用戶模式下一個IRQ中斷發生,這時兩種模式分別使用不同的r13和r14,換句話講,用戶模式使用r13_usr和r14_usr,而IRQ模式使用r13_irq和r14_irq,這樣不會造成寄存器使用沖突。但是,當程序運行在IRQ模式下,又有IRQ中斷進入,此時,第二級中斷使用r13_irq和r14_irq,沖掉了第一級IRQ的堆棧指針和返回地址,導致程序異常。

        解決辦法是在第二級中斷發生前,將第一級中斷用到的寄存器壓棧。

        3.3.2 r15

        程序計算器r15又被記為PC。它有時可以被和r0-r14一樣用作通用寄存器,但很多特殊的指令在使用r15時有些限制。當違反了這些指令的使用限制時,指令的執行結果是不可預知的。

        在下面兩種情況下用于特殊的目的。

        · 讀程序計數器。

        · 寫程序計數器。

        塵埃粒子計數器相關文章:塵埃粒子計數器原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平谷区| 陆丰市| 青龙| 许昌市| 定远县| 洛阳市| 栾城县| 蒙山县| 山东| 自治县| 怀来县| 子洲县| 兴隆县| 观塘区| 长治市| 珲春市| 德惠市| 漾濞| 府谷县| 桃江县| 霍山县| 珲春市| 宕昌县| 唐河县| 郎溪县| 波密县| 湘潭县| 手游| 蕉岭县| 红桥区| 资兴市| 噶尔县| 陈巴尔虎旗| 丰台区| 渑池县| 綦江县| 翼城县| 郎溪县| 无锡市| 新丰县| 东莞市|