看一些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
应该分支。
答案 0 :(得分:0)
因此有两种形式的“extsb”指令,extsb
和extsb.
。
如果您的代码运行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不同,但看起来它正在尝试进行分支 - 如果相等,那么: