中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ARM匯編指令MRS和MSR有什么用

發布時間:2021-11-20 17:16:47 來源:億速云 閱讀:315 作者:小新 欄目:互聯網科技

小編給大家分享一下  ARM匯編指令MRS和MSR有什么用,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

ARM中有兩條指令用于在狀態寄存器和通用寄存器之間傳送數據。

針對32位的ARM處理器,狀態寄存器就是一個32位長的寄存器。每個位的含義如下圖:
ARM匯編指令MRS和MSR有什么用

分成了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的指令編碼格式:


ARM匯編指令MRS和MSR有什么用
 指令的語法格式:

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>寄存器包含將要傳送到狀態寄存器中的數據。

指令的操作偽代碼:


ARM匯編指令MRS和MSR有什么用
 

指令的使用:
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有什么用”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庄河市| 广元市| 塔城市| 庆安县| 资源县| 通州市| 沭阳县| 凤山市| 东兴市| 陇西县| 赣州市| 昂仁县| 双江| 谷城县| 正定县| 开封县| 堆龙德庆县| 汉川市| 揭西县| 山阴县| 营口市| 永吉县| 西乌珠穆沁旗| 民乐县| 谢通门县| 通化市| 辽源市| 任丘市| 保山市| 兴隆县| 墨竹工卡县| 南木林县| 大竹县| 滁州市| 黄山市| 锦州市| 碌曲县| 抚顺市| 康定县| 兴安盟| 齐河县|