PowerPC指令如何extsb。'影响CR寄存器?

时间:2016-07-13 20:33:09

标签: assembly powerpc

看一些ppc反汇编我看到了:

e_lbz    r7, 0(r13)
extsb.   r7,r7
se_beq   some_label

The documentation for extsb.并不清楚它如何影响条件寄存器。我不确定此分支的r7的值是什么。

我的想法是,如果r7中的值在最高位有0,那么extsb。指令不会改变r7中的值。因此,对于任何值r7 >= 0 && r7 <= 127,应设置相等的标志,se_beq应该分支。

1 个答案:

答案 0 :(得分:0)

因此有两种形式的“extsb”指令,extsbextsb.

如果您的代码运行extsb r7,r7,那么r7将由r7的低8位的有符号64位数字组成,被解释为带符号的8位号。

例如,如果r7的低字节内容为0x00(带符号的8位十进制0),则extsb r7,r7的结果为0x0000 0000 0000 0000(已签名) 64位十进制0)。

另一方面,如果r7的低字节为0xff(带符号的8位十进制-1),则结果为0xffff ffff ffff ffff(带符号的64位十进制 - 1)。

第二种形式extsw. r7,r7以及的区别在于扩展r7,它还会在条件寄存器中设置一些位:

  

如果语法形式将Record(Rc)位设置为1,则该指令会影响小于(LT)零,大于(GT)零,等于(EQ)零和摘要溢出(SO)位。条件寄存器字段0。

您的汇编程序转储非常奇怪,而且与之前我见过的ppc不同,但看起来它正在尝试进行分支 - 如果相等,那么:

  • 如果r7的低字节为0,则它​​将标记为0并且将分支
  • 如果r7的低字节不为零,它将签名扩展内容然后不分支。