我是靠谱客的博主 简单火龙果,最近开发中收集的这篇文章主要介绍【摘录】RH850用户手册:软件2 处理器模型7 指令,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

2 处理器模型

2.5 寄存器

2.5.3 寄存器更新

有几种方法可以用来更新寄存器。通常,当使用指令更新寄存器时没有特殊的限制。但是使用下面的指令更新寄存器时,根据工作模式,可能会存在一些限制。

  • LDSR
  • STSR

(1) LDSR和STSR

LDSR和STSR指令可以访问所有的系统寄存器。但是,如果没有使用合适的权限访问系统寄存器,会发生PIE异常或者UCPOP异常。关于每个寄存器的访问权限的详细信息参考第三章节 系统寄存器的说明。有关发生特权冲突时行为的详细信息,参考2.1.3章节 CPU运行模式与特权

图2.3 描述LDSR和STSR指令的执行流程
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 */

  1. 根据访问权限可能发生异常. 详细参考 2.5.3 寄存器更新 ↩︎ ↩︎

最后

以上就是简单火龙果为你收集整理的【摘录】RH850用户手册:软件2 处理器模型7 指令的全部内容,希望文章能够帮你解决【摘录】RH850用户手册:软件2 处理器模型7 指令所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部