(轉)ARM匯編學習筆記——MRS和MSR指令


轉自:http://blog.sina.com.cn/s/blog_6ac051b2010123cz.html

MRS,狀態寄存器傳送至通用寄存器類指令
功能:將狀態寄存器的內容傳送至通用寄存器。

格式:

MRS{<條件碼>}Rd,CPSR}SPSR
其中:
Rd  目標寄存器,Rd不允許R15。
R=0  將CPSR中的內容傳送目的寄存器。
R=1  將SPSR中的內容傳送至目的寄存器。

注釋:
MRS與MSR配合使用,作為更新PSR的讀-修改-寫序列的一部分。例如:改變處理器或清除標志Q。注意:當處理器在用戶模式或系統模式下,一定不能試圖訪問SPSR
這條指令不影響條件碼標志。
例:
MRS  R0,CRSR  ;將CPSR中的內容傳送至R0
MRS  R3,SPSR  ;將SPSR中的內容傳送至R3

 

MSR,通用寄存器傳送至狀態寄存器傳送指令
功能:將通用寄存器的內容傳送至狀態寄存器。

格式:
MSR{<條件碼>CPSR_f|SPSR_f,<#immed_8r>
MSR{<條件碼>CPSR_<field>|SPSR_<field>,Rm
其中:
<field>字段可以是以下之一或多種:(位從右到左)
C:控制域屏蔽字段(PSR中的第0位到第7位);
X:擴展域屏蔽字段(PSR中的第8位到第15位);
S:狀態域屏蔽字段(PSR中的第16位到第32位);
F:標志域屏蔽字段(PSR中的第24位到第31位)。
immed_8r 值數字常量的表達式。常量必須對應8位位圖。該位圖在32位字中循環移位偶數數位。
Rm  源寄存器。

注釋:
同前一條指令(MRS)。
例1:設置N、Z、C、V標志。
MSR  CPSR_f,#&f0000000  ;僅高位有效,其他必須為0
例2:
僅置位C標志,保留N、Z、V標志。
MRS  R0,CPSR  ;將CPSR中的內容傳送至R0
ORR  R0,R0,#&1f  ;置位R0的第29位
MSR  CPSR_c,R0  ;再將R0中的內容傳送至CPSR

例子:設置cpu工作在超級保護模式(SVC32)

@set the cpu to SVC32 mode

mrs r0,cpsr

@把CPSR內容存入r0.使用了mrs指令:專用寄存器到通過寄存器的存取.
@CPSR當前程序狀態寄存器格式如下:

@ 31 30 29 28 27 26 25 24 ~ ~ ~ 8  7  6  5  4  3  2  1  0
@ ___ ___ ___ ___ ___ ___ ___ ___ _ _ _ _ ___ ___ ___ ____ ____ ____ ____ ____
@| N | Z | C | V | * | * | * | * | * * * | I | F | T | M4 | M3 | M2 | M1 | M0 |
@

bic r0,r0,#0x1f

@bic指令(bit clear): r0:= r0 and (not op2).上邊的指令目的是把bit0~bit4清零.

orr r0,r0,#0xd3

@r0:= r0 or 0xd3 . 以上三條指令執行后r0值為:**** **** **** **** **** ***** 11*1 0011

msr cpsr,r0

@把r0存於cpsr.注意:msr指令是專用的通用寄存器到特殊功能寄存器的指令與mrs對應

說明:通過上邊的指令可以看到,實現了兩個功能.1,disable 外部中斷(IRQ)與快速中斷(FIR).2,把系統設為SVC32狀態(超級保護)即M4~M1=10011


免責聲明!

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



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