32位PoerPC构架通用寄存器分析及总结一.docVIP

32位PoerPC构架通用寄存器分析及总结一.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
32位PoerPC构架通用寄存器分析及总结一

32位PowerPC构架通用寄存器分析及总结一 第一部分 32位 PowerPC构架下寄存器概述 32 位PowerPC构架寄存器模型可以分成三个类级别:UISA,VEA,OEA,我们根据这三个级别把PowerPC所使用的所有寄存器分为三类: 第一类:用户指令集构架(UISA-User Instruction Set Architecture)下所使用的寄存器; 第二类:虚拟环境构架(VEA-Virtual Environment Architecture)下所使用的寄存器; 第三类:操作系统环境(OEA-Operating Environment Architecture)下所使用的寄存器; PowerPC指令集构架为所有的算术逻辑运算指令定义了“寄存器到寄存器”格式的指令,这些指令的操作数来自或者来自于寄存器,或者来自于指令中的立即数。而对于“三寄存器”格式的指令,PowerPC指令集定义其中一个寄存器用来存目的操作数,另外两个寄存器用来存放源操作数。这样的话,存放源操作数的寄存器还可以被其它指令使用,从而减少了某些操作的指令数目。并且对于访问寄存器,PowerPC构架定义了明确的load和store访存指令(这是RISC指令集的典型特点)。 备注:寄存器中的保留位允许软件写任何值(其实就是0或者1),但是读出来的值,未必是我们写出来的值。它的值依赖于具体的执行系统。 接下来,我们分别来介绍这三类寄存器。 第二部分 UISA寄存器集合 用户模式下的寄存器可以被所有的用户级软件和特权级软件所使用,它包含以下的寄存器: 32个通用寄存器GPRs(General-purpose registers):GPR0-GPR31; 32个浮点寄存器FRPs(Floating-point registers):FPR0-FPR31; 1个条件寄存器:CR(Condition register); 1个XER寄存器; 1个LR(Link register)寄存器; 1个CTR(Count register)寄存器; 1个浮点状态控制寄存器:FPSCR(Floating-point status and control register); 备注:不管是单精度数还是双精度数,在浮点寄存器中都是以双精度格式存储。 示意图如下: 2.1 通用寄存器GPRs 32个32位通用寄存器主要用来操作整数数据,它们可以作为指令源寄存器和目的寄存器使用,使用起来比较简单,这里就不再相信介绍 2.2 浮点寄存器FPRs PowerPC构架使用32个64位的浮点寄存器,这些寄存器可以在浮点指令中用作源操作数和目的操作数。无论是单精度浮点数还是双精度浮点数在浮点寄存器中都是以双精度格式存储。 除了浮点比较指令之外,其他的浮点操作指令都是操作FPRs中的数据,然后把操作结果放入FPRs中,同时把浮点操作的状态信息存入FPSCR中;而浮点比较指令的结果一般会存放在CR寄存器的CR2字段中。 另外对于FPRs同存放在内存中的双精度输进行数据转存时,不需要格式转换;而对于FPRs和放在在内存中的单精度数进行转存时需要格式转换;而且单精度指令操作FPRs中的数据时,必须把FPRs中的双精度格式的数据转化成单精度格式,单精度指令才能使用。 ? 2.3 CR寄存器 32位的CR寄存器可以反映某些操作的结果(比如cmp指令),协助测试和分支转移指令的执行。 CR寄存器用来存放指令执行之后的状态,该寄存器分为8个字段。分别为CR0,CR1,…,CR7。每个字段都由4bit组成。各个字段CRn(n从0至7)都可以表示响应指令执行的结果: 比如整数的加减及逻辑运算,使用CR0来存放状态,CR0的四个bit位的含义如下: CR0(0):用来表示LT(小于),当整型指令运算结果为负时置1; CR0(1):用来表示GT(大于),当整型指令运算结果为正时置1; CR0(2):用来表示EQ(等于),当整型指令运算结果为0时置1; CR0(3):用来表示SO(溢出),当整型指令运算结果溢出时置1; ? 同理浮点数的运算使用CR1来保存运算状态,保存过程同上。 其实比较指令可以使用CR寄存器的全部的CRn(n从0至7)来保存运算的结果。在使用CR寄存器时,比较指令cmp之后都会有一个条件跳转指令,比如bc指令。其中cmp指令可以指定由CR寄存器的CRn段来保存结构, cmpi指令就用BF字段来指定CRn字段,一般而言bc指令就会指向cmp中相同的CRn段来决定跳转。 下面的指令用来操作CR寄存器的各个CRn域: 1:mtcrf用一个GPR的值来设置CR寄存器的CRn域; 2:mcrf把CR寄存器的一个域CRn拷贝到另一个域CRm; 3:mcrxr把XER寄存器的bit0-bit3拷贝到CR寄存器的

文档评论(0)

sb75290 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档