【问题标题】:How does the PowerPC instruction 'extsb.' affect the CR register?PowerPC 指令“extsb.”是如何实现的?影响CR寄存器?
【发布时间】:2017-02-13 12:32:22
【问题描述】:

看一下我看到的一些 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 应该分支。

【问题讨论】:

  • 哪一部分不清楚?如果r7 中的字节为零,它将分支。
  • 如果r7 为 1 会怎样?那为什么不分支呢?我将通过我认为某些值应该如何工作的示例来补充我的问题。该指令如何设置条件寄存器,其他指令明确说明了如何修改条件寄存器。
  • 标志设置为等于,它在您的链接上这么说。 1 显然不是零,所以没有分支。

标签: assembly powerpc


【解决方案1】:

所以“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,它也会在条件寄存器中设置一些位:

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

您的汇编程序转储非常奇怪,与我以前见过的 ppc asm 不同,但看起来它正在尝试执行分支如果相等,所以:

  • 如果r7的低字节为0,则符号扩展0并分支
  • 如果r7的低字节不为零,则对内容进行符号扩展,然后不分支。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多