概述
2 处理器模型
2.5 寄存器
2.5.3 寄存器更新
有几种方法可以用来更新寄存器。通常,当使用指令更新寄存器时没有特殊的限制。但是使用下面的指令更新寄存器时,根据工作模式,可能会存在一些限制。
- LDSR
- STSR
(1) LDSR和STSR
LDSR和STSR指令可以访问所有的系统寄存器。但是,如果没有使用合适的权限访问系统寄存器,会发生PIE异常或者UCPOP异常。关于每个寄存器的访问权限的详细信息参考第三章节 系统寄存器的说明。有关发生特权冲突时行为的详细信息,参考2.1.3章节 CPU运行模式与特权。
图2.3 描述LDSR和STSR指令的执行流程
2.5.4 访问未定义的寄存器
7 指令
7.2 基本指令
7.2.2 基本指令集
LDSR
[指令格式]
LDSR reg2, regID, selID
STSR reg2, regID
[操作]
SR[regID, selID] <- GR[reg2]
1
[格式]
FormatIX
[操作码]
[标志位]
[描述]
将通用寄存器reg2的字数据加载到由系统寄存器号和组号(regID,selID)指定的系统寄存器中。 通用寄存器reg2不受影响。 如果省略selID,则假定selID为0。
[补充]
执行此指令可能会导致PIE或UCPOP异常,具体取决于CPU操作模式和要访问的系统寄存器的组合。 有关详细信息,请参见 2.5.3 寄存器更新
注意
1.在该指令中,通用寄存器reg2用作源寄存器,但是,为了便于记忆,在操作码中使用了通用寄存器reg1字段。 因此,助记符描述和操作码中寄存器规范的含义与其他指令的含义不同。
2.系统寄存器号或组号是用于标识每个系统寄存器的唯一编号。 第2.5.4节“访问未定义的寄存器”中描述了如何访问未定义的寄存器,但是不建议访问未定义的寄存器。
MOVHI
[描述]
将16位立即数作为高16位,低16位为“ 0”,加上通用寄存器reg1的值,并将结果存储在通用寄存器reg2中。 通用寄存器reg1和标志均不受影响。
[补充]
该指令用于生成32位地址的高16位。
注意
不要指定r0作为reg2
例子
movhi 0x4000, r0, r7 /* r7 = 0x40000000, r0 always retain 0 */
STSR
[指令格式]
STSR regID, reg2, selID
STSR regID, reg2
[操作]
GR[reg2] <- SR[regID, selID]
1
[格式]
FormatIX
[操作码]
[标志位]
[描述]
将通过系统寄存器编号和组号(regID, selID)指定的系统寄存器内容存入通用寄存器reg2中。系统寄存器不被影响。如果selID省略,则被认为0。
[补充]
执行此指令可能会导致PIE或UCPOP异常,具体取决于CPU操作模式和要访问的系统寄存器的组合。 有关详细信息,请参见 2.5.3 寄存器更新
注意
系统寄存器号或组号是用于标识每个系统代理的唯一编号。 2.5.4节 访问未定义的寄存器中描述了如何访问未定义的寄存器,但是不建议访问未定义的寄存器。
例子
stsr 5, r6, 0 /* r6 = PSW */
根据访问权限可能发生异常. 详细参考 2.5.3 寄存器更新 ↩︎ ↩︎
最后
以上就是简单火龙果为你收集整理的【摘录】RH850用户手册:软件2 处理器模型7 指令的全部内容,希望文章能够帮你解决【摘录】RH850用户手册:软件2 处理器模型7 指令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复