ARM匯編語言(1)(基本概念)


1、***.s文件為匯編語言文件格式;

2、ARM寄存器(以Samsung芯片為例)

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

Arm處理器有七種工作模式,為的是形成不同的使用級別,以防造成對系統的破壞。

注意:

不同模式可以訪問的寄存器不同,可以運行的指令不同。

usr:普通模式,其他六種:特權模式,而除了usr和sys模式以外的五種模式是異常模式。

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

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

3)IRQ(10010):外部中斷模式,普通中斷處理

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

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

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

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

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

2.2、Arm處理器總共有37個寄存器其可以分為以下兩類:

1.        通用寄存器(31個)

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

2.        分組寄存器(R8—R1422,這里沒有算CotextA9增加的監控模式中的寄存器

3.        PC指針(R151

2.        狀態寄存器(6同樣沒算CotextA9增加的監控模式中的寄存器

1.        CPSR1個)

2.        SPSR5個)

 

 

 

                                                            

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

2.3、下面結合上圖和上面列出的大框架對寄存器進行解析

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指令中常用作堆棧指針--“SPstack pointer”,特別注意:由於每一種模式都有自己的R13,所以我們在自己初始化的時候一般都要初始化每種模式下的R13,使其指向該運行模式的棧空間。

         ii. R14稱為子程序鏈接寄存器--“LR(Link Register)”。有兩個特殊功能,一種是每一種模式下都可以用於保存函數的返回地址,另外就是異常處理后的返回地址,如中斷。

3. PC指針(R15

R15用作程序計數器--PC對應一個物理寄存器,由於ARM體系結構采用了多級流水線技術

對於ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,PC的值為當前指令的地址值加8個字節程序狀態寄存器

  1. CPSR

CPSR:當前程序狀態寄存器(current program status register),在任何處理器模式下被訪問。它包含了條件標志位、中斷禁止位、當前處理器模式標志以及其他的一些控制和狀態位。

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

 

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

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

Z一般情況下,0表示運算的結果或默認,1表示運算的結果為零,對於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
T1表示為thumb狀態,0arm狀態

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

  1. SPSR

SPSR:程序狀態保存寄存器(saved program status register),每一種處理器模式下都有一個狀態寄存器SPSR,SPSR用於保存CPSR的狀態,以便異常返回后恢復異常發生時的工作狀態。

當特定的異常中斷發生時,這個寄存器用於存放當前程序狀態寄存器的內容。在異常中斷退出時,可以用SPSR來恢復CPSR。由於用戶模式/系統模式不是異常中斷模式,所以他沒有SPSR。

當用戶在用戶模式/系統模式訪問SPSR,將產生不可預知的后果。每一中異常運行模式(除usrsys)有各自的物理寄存器。


免責聲明!

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



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