ARM微處理器的編程模型之:ARM寄存器組織
1.未分組寄存器
未分組寄存器包括r0~r7。顧名思義,在所有處理器模式下對于每一個未分組寄存器來說,指的都是同一個物理寄存器。未分組寄存器沒有被系統(tǒng)用于特殊的用途,任何可采用通用寄存器的應(yīng)用場合都可以使用未分組寄存器。但由于其通用性,在異常中斷所引起的處理器模式切換時,其使用的是相同的物理寄存器,所以也就很容易使寄存器中的數(shù)據(jù)被破壞。
2. 分組寄存器
r8~r14是分組寄存器,它們每一個訪問的物理寄存器取決于當(dāng)前的處理器模式。
對于這些分組寄存器r8~r12來說,每個寄存器對應(yīng)兩個不同的物理寄存器。一組用于除FIQ模式外的所有處理器模式,而另一組則專門用于FIQ模式。這樣的結(jié)構(gòu)設(shè)計有利于加快FIQ的處理速度。不同模式下寄存器的使用,要使用寄存器名后綴加以區(qū)分,例如,當(dāng)使用FIQ模式下的寄存器時,寄存器r8和寄存器r9分別記做r8_fiq, r9_fiq;當(dāng)使用用戶模式下的寄存器時,寄存器r8和r9分別記做r8_usr, r9_usr等。在ARM體系結(jié)構(gòu)中,r8~r12沒有任何指定的其他的用途,所以當(dāng)FIQ中斷到達時,不用保存這些通用寄存器,也就是說FIQ處理程序可以不必執(zhí)行保存和恢復(fù)中斷現(xiàn)場的指令,從而可以使中斷處理過程非常迅速。所以FIQ模式常被用來處理一些時間緊急的任務(wù),如DMA處理。
對于分組寄存器r13和r14來說,每個寄存器對應(yīng)6個不同的物理寄存器。其中的一個是用戶模式和系統(tǒng)模式公用的,而另外5個分別用于5種異常模式。訪問時需要指定它們的模式。名字形式如下:
· r13_mode>
· r14_mode>
其中mode>可以是以下幾種模式之一:usr、svc、abt、und、irp及fiq。
r13寄存器在ARM中常用作堆棧指針,稱為SP。當(dāng)然,這只是一種習(xí)慣用法,并沒有任何指令強制性的使用r13作為堆棧指針,用戶完全可以使用其他寄存器作為堆棧指針。而在Thumb指令集中,有一些指令強制性的將r13作為堆棧指針,如堆棧操作指令。
每一種異常模式擁有自己的r13。異常處理程序負責(zé)初始化自己的r13,使其指向該異常模式專用的棧地址。在異常處理程序入口處,將用到的其他寄存器的值保存在堆棧中,返回時,重新將這些值加載到寄存器。通過這種保護程序現(xiàn)場的方法,異常不會破壞被其中斷的程序現(xiàn)場。
寄存器r14又被稱為連接寄存器(Link Register,LR),在ARM體系結(jié)構(gòu)中具有下面兩種特殊的作用。
(1)每一種處理器模式用自己的r14存放當(dāng)前子程序的返回地址。當(dāng)通過BL或BLX指令調(diào)用子程序時,r14被設(shè)置成該子程序的返回地址。在子程序返回時,把r14的值復(fù)制到程序計數(shù)器PC。典型的做法是使用下列兩種方法之一。
· 執(zhí)行下面任何一條指令。
MOV PC, LR
BX LR
· 在子程序入口處使用下面的指令將PC保存到堆棧中。
STMFD SP!, {register>,LR}
在子程序返回時,使用如下相應(yīng)的配套指令返回。
LDMFD SP!, {register>,PC}
(2)當(dāng)異常中斷發(fā)生時,該異常模式特定的物理寄存器r14被設(shè)置成該異常模式的返回地址,對于有些模式r14的值可能與返回地址有一個常數(shù)的偏移量(如數(shù)據(jù)異常使用SUB PC, LR,#8返回)。具體的返回方式與上面的子程序返回方式基本相同,但使用的指令稍微有些不同,以保證當(dāng)異常出現(xiàn)時正在執(zhí)行的程序的狀態(tài)被完整保存。
R14也可以被用作通用寄存器使用。
注意 | 當(dāng)嵌套中斷被允許時(即異常可重入),r13和r14的使用要特別小心。例如,在用戶模式下一個IRQ中斷發(fā)生,這時兩種模式分別使用不同的r13和r14,換句話講,用戶模式使用r13_usr和r14_usr,而IRQ模式使用r13_irq和r14_irq,這樣不會造成寄存器使用沖突。但是,當(dāng)程序運行在IRQ模式下,又有IRQ中斷進入,此時,第二級中斷使用r13_irq和r14_irq,沖掉了第一級IRQ的堆棧指針和返回地址,導(dǎo)致程序異常。 解決辦法是在第二級中斷發(fā)生前,將第一級中斷用到的寄存器壓棧。 |
3.3.2 程序計數(shù)器r15
程序計算器r15又被記為PC。它有時可以被和r0-r14一樣用作通用寄存器,但很多特殊的指令在使用r15時有些限制。當(dāng)違反了這些指令的使用限制時,指令的執(zhí)行結(jié)果是不可預(yù)知的。
程序計數(shù)器在下面兩種情況下用于特殊的目的。
· 讀程序計數(shù)器。
· 寫程序計數(shù)器。
塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理
評論