小編給大家分享一下 ARM匯編指令MRS和MSR有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
醴陵網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),醴陵網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為醴陵上1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個(gè)售后服務(wù)好的醴陵做網(wǎng)站的公司定做!
ARM中有兩條指令用于在狀態(tài)寄存器和通用寄存器之間傳送數(shù)據(jù)。
針對32位的ARM處理器,狀態(tài)寄存器就是一個(gè)32位長的寄存器。每個(gè)位的含義如下圖:
分成了4部分:
1,條件標(biāo)志位
N(Negative), Z(Zero), C(Carry), V(Verflow)統(tǒng)稱為條件標(biāo)志位。ARM指令可以根據(jù)CPSR中的這些條件標(biāo)志位來選擇性的執(zhí)行。
2,Q標(biāo)志位
ARM v5的E系列處理器中,CPSR的bit[27]稱為Q標(biāo)志位。主要用于指示增強(qiáng)的DSP指令是否發(fā)生了溢出。
3,控制位
I, F, T以及M[4:0]統(tǒng)稱為控制位。當(dāng)異常中斷發(fā)生時(shí),這些位發(fā)生變化。在特權(quán)級(jí)的處理器模式下,軟件可以修改這些控制位。
下表示控制位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 | 系統(tǒng)模式 | PC,CPSR(ARMv4及以上版本), R14~R0 |
4,保留位
用于將來ARM版本的擴(kuò)展。
狀態(tài)寄存器訪問指令僅有兩天:
MRS: 狀態(tài)寄存器到通用寄存器的傳送指令。
MSR: 通用寄存器到狀態(tài)寄存器的傳送指令。
MRS指令介紹
MRS的指令編碼格式:
指令的語法格式:
MRS{
MRS{
其中:
指令操作的偽代碼:
C代碼
if ConditionPassed(cond) then if R == 1 then Rd = SPSR else Rd = CPSR
MSR指令使用的場合:
通常通過“讀取-修改-寫回”操作序列修改狀態(tài)寄存器的內(nèi)容。MRS指令用于將狀態(tài)寄存器的內(nèi)容讀到通用寄存器中。
當(dāng)異常允許嵌套時(shí),需要在進(jìn)入異常中斷之后,嵌套中斷發(fā)生之前保存當(dāng)前處理器模式對應(yīng)的SPSR。這時(shí)需要先通過MRS指令讀出SPSR的值,在用其他指令將SPSR值保存起來。
在進(jìn)程切換時(shí)也需要保存當(dāng)前狀態(tài)寄存器的值。
MSR指令介紹
MRS的指令編碼格式:
這里分為兩種格式,一種是原操作數(shù)為通用寄存器, 另一種是源操作數(shù)是立即數(shù)。
指令的語法格式:
C代碼
MSR{} CPSR_ , # MSR{ } CPSR_ , MSR{ } CPSR_ , # MSR{ } CPSR_ ,
其中:
f: 指示bits[31 : 24],又名條件標(biāo)志位域
s: 指示bits[23 : 16],又名狀態(tài)標(biāo)志位域
x: 指示bits[15 : 8], 又名擴(kuò)展位域
c: 指示bits[7 : 0],又名控制位
指令的操作偽代碼:
指令的使用:
MSR指令通常用于恢復(fù)狀態(tài)寄存器的內(nèi)容或者改變寄存器的內(nèi)容。
當(dāng)退出異常中斷處理器程序時(shí),如果事先保存了狀態(tài)寄存器的內(nèi)容通常通過MSR指令將事先保存的狀態(tài)寄存器內(nèi)容恢復(fù)到狀態(tài)寄存器中。
當(dāng)需要修改狀態(tài)寄存器的內(nèi)容時(shí),通過“讀取-修改-寫回”指令序列完成。寫回操作也是通過MSR指令完成的。
處理器切換到特權(quán)模式,使用將要修改某個(gè)位域的示例:
C代碼
mrs r0, cpsr ;讀取cpsr中的值 bic r0, r0, #0x1F ;修改,去除當(dāng)前處理器模式 orr r0, r0, #0x13 ;修改,設(shè)置特權(quán)模式 msr cpsr_c, r0 ;寫回,僅僅修改CPRS中的控制位
當(dāng)進(jìn)程切換到應(yīng)用場合,應(yīng)指定SPSR_fsxc來完全恢復(fù)。
看完了這篇文章,相信你對“ ARM匯編指令MRS和MSR有什么用”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!