本文共 1538 字,大约阅读时间需要 5 分钟。
(转)http://blog.ednchina.com/yannzi/197679/message.aspx
& http://blog.sina.com.cn/s/blog_4117d8560100b432.html
1 状态寄存器传送至通用寄存器类指令
功能:将状态寄存器的内容传送至通用寄存器。格式:
MRS{<条件码>}Rd,CPSR}SPSR其中:Rd 目标寄存器,Rd不允许R15。R=0 将CPSR中的内容传送目的寄存器。R=1 将SPSR中的内容传送至目的寄存器。注释:
MRS与MSR配合使用,作为更新PSR的读-修改-写序列的一部分。例如:改变处理器或清除标志Q。注意:当处理器在用户模式或系统模式下,一定不能试图访问SPSR这条指令不影响条件码标志。例:MRS R0,CRSR ;将CPSR中的内容传送至R0MRS R3,SPSR ;将SPSR中的内容传送至R32 通用寄存器传送至状态寄存器传送指令
功能:将通用寄存器的内容传送至状态寄存器。格式:
MSR{<条件码>CPSR_f|SPSR_f,<#ommed_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中的内容传送至R0ORR 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
转载地址:http://uestd.baihongyu.com/