天天看點

ARM7的相關寄存器

本文轉自百度文檔

 ARM7的相關寄存器

ARM7的相關寄存器

    在彙編語言中寄存器 R0~R13 為儲存資料或位址值的通用寄存器。它們是完全通用的寄存器,不會被體系結構作為特殊用途,并且可用于任何使用通用寄存器的指令。

    其中 R0~R7 為未分組的寄存器,也就是說對于任何處理器模式,這些寄存器都對應于相同的 32 位實體寄存器。寄存器 R8~R14 為分組寄存器。它們所對應的實體寄存器取決于目前的處理器模式,幾乎所有允許使用通用寄存器的指令都允許使用分組寄存器。寄存器 R8~R12 有兩個分組的實體寄存器。一個用于除 FIQ 模式之外的所有寄存器模式,另一個用于 FIQ 模式。這樣在發生 FIQ 中斷後,可以加速 FIQ 的處理速度。寄存器 R13、 R14 分别有 6 個分組的實體寄存器。一個用于使用者和系統模式,其餘 5 個分别用于 5 種異常模式。寄存器 R13 常作為堆棧指針( SP)。在 ARM 指令集當中,沒有以特殊方式使用 R13 的指令或其它功能,隻是習慣上都這樣使用。但是在 Thumb 指令集中存在使用 R13 的指令。R14 為連結寄存器( LR),在結構上有兩個特殊功能:

1,在每種模式下,模式自身的 R14 版本用于儲存子程式傳回位址;

2,當發生異常時,将 R14 對應的異常模式版本設定為異常傳回位址(有些異常有一個小的固定偏移量)。

    R14 寄存器注意要點:當發生異常嵌套時,這些異常之間可能會發生沖突。例如:如果使用者在使用者模式下執行程式時發生了 IRQ 中斷,使用者模式寄存器不會被破壞。但是如果允許在 IRQ 模式下的中斷處理程式重新使能 IRQ 中斷,并且發生了嵌套的 IRQ中斷時,外部中斷處理程式儲存在 R14_irq 中的任何值都将被嵌套中斷的傳回位址所覆寫。解決辦法是確定 R14的對應版本在發生中斷嵌套時不再儲存任何有意義的值(将 R14 入棧),或者切換到其它處理器模式下。寄存器 R15 為程式計數器( PC),它指向正在取指的位址。可以認為它是一個通用寄存器,但是對于它的使用有許多與指令相關的限制或特殊情況。如果 R15 使用的方式超出了這些限制,那麼結果将是不可預測的。

    寄存器 CPSR 為程式狀态寄存器,在異常模式中,另外一個寄存器“程式狀态儲存寄存器( SPSR)”可以被通路。每種異常都有自己的 SPSR,在因為異常事件而進入異常時它儲存 CPSR 的目前值,異常退出時可通過它恢複 CPSR。