arm中有兩條指令用於在狀態暫存器和通用暫存器之間傳送資料。
針對32位的arm處理器,狀態暫存器就是乙個32位長的暫存器。每個位的含義如下圖:
分成了4部分:
1,條件標誌位
n(negative), z(zero), c(carry), v(verflow)統稱為條件標誌位。arm指令可以根據cpsr中的這些條件標誌位來選擇性的執行。
2,q標誌位
arm v5的e系列處理器中,cpsr的bit[27]稱為q標誌位。主要用於指示增強的dsp指令是否發生了溢位。
3,控制位
i, f, t以及m[4:0]統稱為控制位。當異常中斷發生時,這些位發生變化。在特權級的處理器模式下,軟體可以修改這些控制位。
下表示控制位m[4:0]的含義:
m[4:0]
處理器模式
可訪問的暫存器
0b10000
使用者模式
pc,cpsr, r14~r0
0b10001
fiq模式
pc,cpsr, spsr_fiq,r14_fiq,r8_fiq, r7~r0
0b10010
irq模式
pc,cpsr, spsr_irq,r14_irq,r13_irq,r12~r0
0b10011
管理模式
pc,cpsr, spsr_svc,r14_svc,r13_svc,r12~r0
0b10111
中止模式
pc,cpsr, spsr_abt,r14_abt,r13_abt, r12~r0
0b11011
未定義模式
pc,cpsr, spsr_und,r14_und,r13_und, r12~r0
0b11111
系統模式
pc,cpsr(armv4及以上版本), r14~r0
4,保留位
用於將來arm版本的擴充套件。
狀態暫存器訪問指令僅有兩天:
mrs: 狀態暫存器到通用暫存器的傳送指令。
msr: 通用暫存器到狀態暫存器的傳送指令。
mrs指令介紹
mrs的指令編碼格式:
指令的語法格式:
mrs{}, cpsr
mrs{}, spsr
其中:為指令執行的條件碼。當忽略時指令為無條件執行。
為目標暫存器。
指令操作的偽**:
if conditionpassed(cond) thenmsr指令使用的場合:if r == 1 then
rd = spsr
else
rd = cpsr
msr指令介紹
mrs的指令編碼格式:
這裡分為兩種格式,一種是原運算元為通用暫存器, 另一種是源運算元是立即數。
指令的語法格式:
msr{} cpsr_, #msr{} cpsr_, msr{} cpsr_, #msr{} cpsr_,其中:
為指令執行的條件碼。當忽略時指令為無條件執行。
設定狀態暫存器中需要操作的位。狀態暫存器的32位可以分為4個8位的域:
f: 指示bits[31 : 24],又名條件標誌位域
s: 指示bits[23 : 16],又名狀態標誌位域
x: 指示bits[15 : 8], 又名擴充套件位域
c: 指示bits[7 : 0],又名控制位
為將要傳送到狀態暫存器中的立即數,該立即數的計算方式可以去照看
暫存器包含將要傳送到狀態暫存器中的資料。
指令的操作偽**:
指令的使用:
msr指令通常用於恢復狀態暫存器的內容或者改變暫存器的內容。
當退出異常中斷處理器程式時,如果事先儲存了狀態暫存器的內容通常通過msr指令將事先儲存的狀態暫存器內容恢復到狀態暫存器中。
當需要修改狀態暫存器的內容時,通過「讀取-修改-寫回」指令序列完成。寫回操作也是通過msr指令完成的。
處理器切換到特權模式,使用將要修改某個位域的示例:
mrs r0, cpsr ;讀取cpsr中的值當程序切換到應用場合,應指定spsr_fsxc來完全恢復。bic r0, r0, #0x1f ;修改,去除當預處理器模式
orr r0, r0, #0x13 ;修改,設定特權模式
msr cpsr_c, r0 ;寫回,僅僅修改cprs中的控制位
彙編暫存器,mov指令 2021 3 13
即 ax,bx,cx,dx,sp,bp,si,di,ip,flag,cs,ds,ss,es 共 14 個。而這 14 個暫存器按照一定方式又分為了通用暫存器,控制暫存器和段暫存器。通用暫存器 ax,bx,cx,dx 稱作為資料暫存器 ax accumulator 累加暫存器,也稱之為累加器 cx c...
根據指令判斷暫存器狀態
給出下列各指令執行後al的值以及cf,zf,sf,of和pf的狀態。mov al,89h 第1行 add al,al 第2行 add al,9dh 第3行 cmp al,0bch 第4行 sub al,al 第5行 dec al 第6行 inc al 第7行 這類題解題步驟是 1.先算無符號數 2....
彙編基礎之暫存器及彙編指令
最近在學習協程方面的知識,在協程的一種實現方式中有一種是用彙編實現的,所以這裡再把彙編知識複習一下。暫存器按照其用途可分為以下4類 資料暫存器包括 個16位的暫存器 ax,bx,cx,dx 或者8個8位的暫存器 ah,al,bh,bl,ch,cl,dh,dl 這些暫存器都是用來暫時存放運算元,運算結...