用于 Power 体系结构的汇编语言,第 3 部分- 使用 PowerPC 分支处理器进行编程.docVIP

用于 Power 体系结构的汇编语言,第 3 部分- 使用 PowerPC 分支处理器进行编程.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文档。上传文档
查看更多
用于 Power 体系结构的汇编语言,第 3 部分- 使用 PowerPC 分支处理器进行编程.doc

  用于 Power 体系结构的汇编语言,第 3 部分: 使用 PowerPC 分支处理器进行编程   分支寄存器   Potcr、mtcrf 和 mfcr 加载到通用寄存器中(或从通用寄存器中进行加载)。mtcr 将一个特定的通用寄存器加载到条件寄存器中。mfcr 将条件寄存器移到通用寄存器中。mtcrf 从通用寄存器中加载条件寄存器,不过只会加载由 8 位掩码所指定的域,即第一个操作数。   下面是几个例子。 清单 1. 条件寄存器转换的例子 #Copy register 4 to the condition register  mtcr 4    #Copy the condition register to register 28  mfcr 28    #Copy fields 0, 1, 2, and 7 from register 18 to the condition register  mtcrf 0 18    计数寄存器和链接寄存器   链接寄存器(名为 LR)是专用寄存器,其中保存了分支指令的返回地址。所有的分支指令都可以用来设置链接寄存器;如果进行分支,就将链接寄存器设置成当前指令之后紧接的那条指令的地址。分支指令通过将字母 l 附加到指令末尾来设置链接寄存器。举例来说,b 是无条件的分支指令,而 bl 则是设置链接寄存器的一条无条件分支指令。   计数寄存器(名为 CTR)是用来保存循环计数器的一个专用寄存器。专用分支指令可能会减少计数寄存器,并且(或者)会根据 CTR 是否达到 0 来进行条件分支跳转。   链接寄存器和计数寄存器都可以用作分支目的地。bctr 分支跳转到计数寄存器中指定的地址,blr 分支跳转到链接寄存器中指定的地址。   链接寄存器和计数寄存器的值也可以从通用寄存器中拷贝而来,或者拷贝到通用寄存器中。对于链接寄存器来说,mtlr 会将给定的寄存器值拷贝到 链接寄存器中,mflr 则将值从 链接寄存器拷贝到通用寄存器中。mtctr 和 mfctr 也可以对计数寄存器实现相同的功能。   无条件分支   Po 指令格式:   I-Form 指令格式   0-5 位   操作码   6-29 位   绝对或相对分支地址   30 位   绝对地址位 如果这个域被置位了,那么指令就会被解释成绝对地址,否则就被解释成相对地址   31 位   链接位 如果这个域被置位了,那么指令就会将链接寄存器设置为下一条指令的地址   正如前面介绍的一样,将字母 l 添加到分支指令后面会导致链接位被置位,从而使 返回地址(分支跳转后的指令)存储在链接寄存器中。如果您在指令末尾再加上字母 a(位于 l 之后,如果l 也同时使用的话),那么所指定的地址就是绝对地址(通常在用户级代码中不会这样用,因为这会过多地限制分支目的地)。   清单 2 阐述了无条件分支的用法,然后退出(您可以将下面的代码输入到 branch_example.s 文件中): 清单 2. 无条件分支的例子 ### ENTRY POINT DECLARATION ###  .section .opd, aple.s -o branch_example.o ld -melf64ppc branch_example.o -o branch_example ./branch_example   请注意 b 和 ba 的目标在汇编语言中是以相同的方式来指定的,尽管二者在指令中的编码方式大不相同。汇编器和链接器会负责为我们将目标地址转换成相对地址或绝对地址。   条件分支   比较寄存器   cmp 指令用来将寄存器与其他寄存器或立即操作数进行比较,并设置条件寄存器中适当状态位。缺省情况下,定点比较指令使用 cr0 来存储结果,但是这个域也可以作为一个可选的第一操作数来指定。比较指令的用法如清单 3 所示: 清单 3. 比较指令的例子 #pare register 3 and register 4 as doublepd 3, 4    #pare register 5 and register 10 as unsigned doublepld 5, 10    #pare register 6 ber 12 as ppd cr4, 30, 31    正如您可以看到的一样,d 指定操作数为双字,而 指令格式:   B-Form 指令格式   0-5 位   操作码   6-10 位   指定如何对位进行测试、是否使用计数寄存器、如何使用计数寄存器,以及是否进行分支预测(称为 BO 域)   11-15 位   指定条件寄存器中要测试的位(称为 BI 域)   16-29 位   

文档评论(0)

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

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

1亿VIP精品文档

相关文档