新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 协处理器及其他指令之:状态寄存器访问指令

协处理器及其他指令之:状态寄存器访问指令

作者: 时间:2013-09-13 来源:网络 收藏

本文引用地址:https://www.eepw.com.cn/article/257051.htm

9.2.2写状态寄存器指令MSR

1.指令编码格式

写状态寄存器指令MSR(MovetoStatusRegisterfromRegister)。在处理器中,只有MSR指令可以直接设置状态寄存器CPSR或SPSR。

图9.7、图9.8分别显示了源操作数为立即数的MSR指令和源操作数为寄存器的MSR指令的编码格式。

图9.7源操作数为立即数的MSR指令编码格式

图9.8源操作数为寄存器的MSR指令编码格式

2.指令的语法格式

MSR{cond>}CPSR_fields>,#immediate>

MSR{cond>}CPSR_fields>,Rm>

MSR{cond>}SPSR_fields>,#immediate>

MSR{cond>}SPSR_fields>,Rm>

①cond>

为指令编码中的条件域。它指示指令在什么条件下执行。当cond>忽略时,指令为无条件执行(cond=AL(Alway))。

②fields>

域标志位,是下面选项中的一种或几种的组合。

·C:设置控制位掩码域(bit[16])。

·X:设置扩展位掩码域(bit[17])。

·S:设置状态位掩码域(bit[18])。

·F:设置标志位掩码域(bit[19])

③immediate>

将被传送到CPSR和SPSR寄存器的立即数。此立即数可以为8位立即数(范围在0x00~0xff之间)。

④Rm>

指定的通用寄存器,此寄存器包含将要被传送状态寄存器中的数据。

3.指令操作的伪代码

指令操作的伪代码如下面程序段所示。

IfConditionPassed{cond}then

Ifopcode[25]==1

Operand=8_bit_immediateRotate_Right{rotate_imm*2}

Else/*opcode[25]==0*/

Operand=Rm

IfR==0then

Iffield_mask[0]==1andinAprivilegedMode()then

CPSR[7:0]=operand[7:0]

Iffield_mask[1]==1andinAprivilegedMode()then

CPSR[15:8]=operand[15:8]

Iffield_mask[2]==1andinAprivilegedMode()then

CPSR[23:16]=operand[23:16]

Iffield_mask[3]==1andthen

CPSR[31:24]=operand[31:24]

Else/*R==1*/

Iffield_mask[0]==1andCurrentModeHasSPSR()then

SPSR[7:0]=operand[7:0]

Iffield_mask[1]==1andCurrentModeHasSPSR()then

SPSR[15:8]=operand[15:8]

Iffield_mask[2]==1andCurrentModeHasSPSR()then

SPSR[23:16]=operand[23:16]

Iffield_mask[3]==1andCurrentModeHasSPSR()then

SPSR[31:24]=operand[31:24]



评论


相关推荐

技术专区

关闭