ARM 關鍵幾個寄存器


1. PC(程序計數器)  = windows 中 EIP
解析:
處理器要執行的程序(指令序列)都是以二進制代碼序列方式預存儲在計算機的存儲器中,處理器將這些代碼逐條
地取到處理器中再譯碼、執行,以完成整個程序的執行。為了保證程序能夠連續地執行下去,CPU必須具
有某些手段來確定下一條取指指令的地址.程序計數器(PC)正是起到這種作用,所以通常又稱之為‘指令計數器’
。CPU總是按照PC的指向對指令序列進行取指、譯碼和執行,也就是說,最終是PC 決定了程序運行流向。故而,程
序計數器(PC )屬於特別功能寄存器范疇,不能自由地用於存儲其他運算數據.

在程序開始執行前,將程序指令序列的起始地址,即程序的第一條指令所在的內存單元地址送入PC,CPU 按照 PC
的指示從內存讀取第一條指令(取指)。當執行指令時,CPU自動地修改PC 的內容,即每執行一條指令PC增加一個
量,這個量等於指令所含的字節數(指令字節數),使 PC總是指向下一條將要取指的指令地址。由於大多數指令都
是按順序來執行的,所以修改PC 的過程通常只是簡單的對PC 加“指令字節數”。
    當程序轉移時,轉移指令執行的最終結果就是要改變PC的值,此PC值就是轉去的目標地址。處理器總是按照PC
 指向取指、譯碼、執行,以此實現了程序轉移。

2.堆棧指針寄存器 SP  (寄存器 R13)
ARM處理器中通常將寄存器R13作為堆棧指針(SP)。ARM處理器針對不同的模式,共有 6 個堆棧指針(SP),其中
用戶模式和系統模式共用一個SP,每種異常模式都有各自專用的R13寄存器(SP)。它們通常指向各模式所對應的專
用堆棧,也就是ARM處理器允許用戶程序有六個不同的堆棧空間,ARM處理器中的R13被用作SP。當不使用堆棧時,
R13 也可以用做通用數據寄存器.
****************************************************************************************************
由於處理器的每種運行模式均有自己獨立的物理寄存器R13,在用戶應用程序的初始化部分,一般都要初始化每種模
式下的R13,使其指向該運行模式的棧空間。這樣,當程序的運行進入異常模式時,可以將需要保護的寄存器放入R
13所指向的堆棧,而當程序從異常模式返回時,則從對應的堆棧中恢復,采用這種方式可以保證異常發生后程序的
正常執行。
****************************************************************************************************


3.R14稱為子程序鏈接寄存器LR(Link Register),當執行子程序調用指令(BL)時,R14可得到R15(程序計數器PC)的備
份.在每一種運行模式下,都可用R14保存子程序的返回地址,當用BL或BLX指令調用子程序時,將PC的當前值復制給
R14,執行完子程序后,又將R14的值復制回PC,即可完成子程序的調用返回。以上的描述可用指令完成。
執行以下任意一條指令:
MOV PC,LR
BX LR
在子程序入口處使用以下指令將R14存入堆棧:
STMFD SP!,{,LR}
對應的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}
R14也可作為通用寄存器。

4. PSR 寄存器
條件碼標志(Condition Code Flags)
N、Z、C、V均為條件碼標志位。它們的內容可被算術或邏輯運算的結果所改變,並且可以決定某條指令是否
被執行。
在ARM狀態下,絕大多數的指令都是有條件執行的。
在Thumb狀態下,僅有分支指令是有條件執行的。

  N  Negative        如果結果是負數則置位     當用補碼表示的帶符號數進行運算時,N=1表示運算的結果為負數;N=0表示運算的結果是正數或零。
  Z  Zero            如果結果是零則置位       Z=1表示運算的結果為零;Z=0表示運算的結果不為零。
  C  Carry           如果發生進位則置位       有4種方法影響C的值:
                l  加法運算:當運算結果產生了進位時(無符號數溢出),C=1,否則C=0。
                2  減法運算(包括比較指令CMP):當運算時產生了借位(無符號數溢出)時,C=0,否則C=1。
                3  對於包含移位操作的非加/減運算指令,C為移出值的最后一位。
                4  對於其他的非加/減運算指令,C的值通常不改變。

  V  Overflow        如果發生溢出則置位       有2種方法設置V的值:
               l  對於加/減法運算指令,當操作數和運算結果為二進制的補碼表示的帶符號數時,V=1表示符號位溢出。
              2  對於其它的非加/減法運算指令,V的值通常不改變。
  I  IRQ             中斷禁用 
  F  FIQ             快速中斷禁用 
  T                  工作狀態位,1為Thumb;0為ARM


免責聲明!

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



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