新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM微處理器的編程模型之:ARM寄存器組織

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

作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/257086.htm

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等。在體系結(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寄存器在中常用作堆棧指針,稱為SP。當(dāng)然,這只是一種習(xí)慣用法,并沒有任何指令強制性的使用r13作為堆棧指針,用戶完全可以使用其他寄存器作為堆棧指針。而在Thumb指令集中,有一些指令強制性的將r13作為堆棧指針,如堆棧操作指令。

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

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

(1)每一種處理器模式用自己的r14存放當(dāng)前子程序的返回地址。當(dāng)通過BL或BLX指令調(diào)用子程序時,r14被設(shè)置成該子程序的返回地址。在子程序返回時,把r14的值復(fù)制到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 r15

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

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

· 讀程序計數(shù)器。

· 寫程序計數(shù)器。

塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉