您好,登錄后才能下訂單哦!
小編給大家分享一下 ARM匯編指令MRS和MSR有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
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{<cond>}<Rd>, CPSR
MRS{<cond>}<Rd>, SPSR
其中:
<cond>為指令執行的條件碼。當<cond>忽略時指令為無條件執行。
<Rd>為目標寄存器。
指令操作的偽代碼:
C代碼
if ConditionPassed(cond) then if R == 1 then Rd = SPSR else Rd = CPSR
MSR指令使用的場合:
通常通過“讀取-修改-寫回”操作序列修改狀態寄存器的內容。MRS指令用于將狀態寄存器的內容讀到通用寄存器中。
當異常允許嵌套時,需要在進入異常中斷之后,嵌套中斷發生之前保存當前處理器模式對應的SPSR。這時需要先通過MRS指令讀出SPSR的值,在用其他指令將SPSR值保存起來。
在進程切換時也需要保存當前狀態寄存器的值。
MSR指令介紹
MRS的指令編碼格式:
這里分為兩種格式,一種是原操作數為通用寄存器, 另一種是源操作數是立即數。
指令的語法格式:
C代碼
MSR{<cond>} CPSR_<fields>, #<immediate> MSR{<cond>} CPSR_<fields>, <Rm> MSR{<cond>} CPSR_<fields>, #<immediate> MSR{<cond>} CPSR_<fields>, <Rm>
其中:
<cond>為指令執行的條件碼。當<cond>忽略時指令為無條件執行。
<fields>設置狀態寄存器中需要操作的位。狀態寄存器的32位可以分為4個8位的域:
f: 指示bits[31 : 24],又名條件標志位域
s: 指示bits[23 : 16],又名狀態標志位域
x: 指示bits[15 : 8], 又名擴展位域
c: 指示bits[7 : 0],又名控制位
<immediate>為將要傳送到狀態寄存器中的立即數,該立即數的計算方式可以去照看<ARM+Architecture+Reference+Manual.pdf>
<Rm>寄存器包含將要傳送到狀態寄存器中的數據。
指令的操作偽代碼:
指令的使用:
MSR指令通常用于恢復狀態寄存器的內容或者改變寄存器的內容。
當退出異常中斷處理器程序時,如果事先保存了狀態寄存器的內容通常通過MSR指令將事先保存的狀態寄存器內容恢復到狀態寄存器中。
當需要修改狀態寄存器的內容時,通過“讀取-修改-寫回”指令序列完成。寫回操作也是通過MSR指令完成的。
處理器切換到特權模式,使用將要修改某個位域的示例:
C代碼
mrs r0, cpsr ;讀取cpsr中的值 bic r0, r0, #0x1F ;修改,去除當前處理器模式 orr r0, r0, #0x13 ;修改,設置特權模式 msr cpsr_c, r0 ;寫回,僅僅修改CPRS中的控制位
當進程切換到應用場合,應指定SPSR_fsxc來完全恢復。
看完了這篇文章,相信你對“ ARM匯編指令MRS和MSR有什么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。