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