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。


發佈了28 篇原創文章 · 獲贊 22 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章