arm寄存器解析


寒假閑來無事准備將自己的走過的arm之路總結一下,今天就先從arm的寄存器說起吧,歡迎各位拍磚。

要介紹arm寄存器之前我們要先了解一下arm處理器的工作模式:

Arm處理器有七種工作模式,為的是形成不同的使用級別,以防造成對系統的破壞。不同模式可以訪問的寄存器不同,可以運行的指令不同。

1usr10000):普通應用程序運行的模式(應用程序)

2FIQ10001):快速中斷模式,以處理快速情況,高速數據傳輸

3IRQ10010):外部中斷模式,普通中斷處理

4svc10011):保護模式(管理模式),操作系統使用的特權模式(內核)

5abt10111):數據訪問中止模式,用於虛擬存儲和存儲保護

6und11011):未定義指令終止模式,用於支持通過軟件仿真硬件的協處理器

7sys11111):系統模式,用於運行特權級的操作系統任務(armv4以上版本才具有)

注意:usr是普通模式,其他六種是特權模式,而除了usrsys模式以外的五種模式是異常模式

--------------------------------------------------------------------

Ok下面進入正題:

我們首先可以找到這樣一本資料《ARM Architecture Reference Manual在其中的Programmers’Model一章中,我們可以輕松的找到官方文檔對寄存器的說明,建議大家去看看官方的英文文檔,我將其中的重要內容簡單的總結一下。

Arm處理器總共有37個寄存器其可以分為以下兩類(在此我先列出大框架下面會一一介紹):

1.        通用寄存器(31個)

1.        不分組寄存器(R0—R7

2.        分組寄存器(R8—R14

3.        PC指針(R15

2.        狀態寄存器(6個)

1.        CPSR1個)

2.        SPSR5個)

相信通過上面的介紹大家對arm的寄存器有個初步的印象,下面官方文檔對寄存器的說明:

下面我將會結合上圖和我上面列出的大框架對寄存器進行解析:

1.        不分組寄存器(R0—R7

在所有的運行模式下都使用同一個物理寄存器,它們未被系統用作特殊的用途

2.        分組寄存器(R8—R14

a)        對於R8~R12,當使用FIQ(快速中斷模式)時訪問寄存器R8_fiq~R12_fiq,當使用除FIQ模式以外的其他模式時,訪問寄存器R8~R12

b)        對於R13,R14來說,每個寄存器對應6個不同的物理寄存器,其中一個是用戶模式與系統模式共用(圖中的R13R14),另外5個物理寄存器對應其他5種不同的運行模式,並采用以下記號來區分不同的物理寄存器分別為fiq,irq,svc,abt,und.(如上圖)

                             i.R13ARM指令中常用作堆棧指針SP

特別注意:由於每一種模式都有自己的R13,所以我們在自己初始化的時候一般都要初始化每種模式下的R13,使其指向該運行模式的棧空間。

                             ii. R14稱為子程序鏈接寄存器LR(Link Register)

有兩個特殊功能,一種是每一種模式下都可以用於保存函數的返回地址,另外就是異常處理后的返回地址,如中斷。

3.        PC指針(R15

R15用作程序計數器(PC)對應一個物理寄存器,由於ARM體系結構采用了多級流水線技術(不了解多級流水線的可以訪問這個博客http://blog.csdn.net/abclixu123/article/details/7471822,博主講的不錯),對於ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,PC的值為當前指令的地址值加8個字節程序狀態寄存器

4.        CPSR

在官方文檔中我們可以找到

下面介紹其中幾個比較重要的位,其他位,大家可以參考官方手冊:

N: 當兩個表示的有符號整數運算時,1表示運算結果為負數,0表示結果為正或零。

Z1表示運算的結果為零,0表示運算的結果不為零。對於CMP指令,1表示進行比較的兩個數大小相等。

C下面分四種情況討論C的設置方法:

a)        加法運算(包括比較指令CMN):當運算產生了進位時(無符號數溢出),C=1,否則C=0

b)        減法運算(包括比較指令CMP):當運算時產生了借位(無符號數溢出),C=0,否則C=1

c)        對於包含移位操作的非加/減運算指令,C為移出值的最后一位。

d)       對於其他的非加/減運算指令,C的值通常不改變。

V:下面分兩種情況討論V的設置方法

a)        對於加/減法運算指令,當操作數和運算結果為二進制的補碼表示的帶符號數時,V=1表示符號位溢出。

b)        對於其他的非加/減運算指令,C的值通常不改變。

I表示禁止外部(硬件)中斷(IRQ
F
表示禁止快速中斷(FIQ
T
1表示為thumb狀態0arm狀態

M[4:0]用來設置處理器的工作模式具體數據見本文開始的介紹。

5.        SPSR

SPSR usrsys外,對應用於異常保護的CPSR的備份,異常時,保存CPSR值,異常退出時,將該值恢復到CPSR,以保證程序的正常運行,每一中異常運行模式(除usrsys)有各自的物理寄存器。

 

以上是自己的arm寄存器的簡單理解,希望各位提出寶貴意見,並且在這個寒假從今天開始沒有意外的話我的博客會一天一更,努力學習,歡迎大家監督。






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM