JL在装配后进行测试

时间:2012-06-01 18:10:33

标签: assembly

我看到以下代码 -

add    $0x14,%esp
mov    %eax,%ebx
test   %ebx,%ebx
jl     80590d7 <XXXX+0xbc7>

我在分析上述代码时感到困惑。如果我们有像test%ebx这样的指令,%ebx应该总是相等吗?

另外,我在GDB中运行,以下是信息寄存器的输出 -

(gdb) info registers
eax            0x0      0
ecx            0x189f   6303
edx            0x6      6
ebx            0x442ff4 4468724
esp            0xffbde13c       0xffbde13c
ebp            0xffbde4c8       0xffbde4c8
esi            0x1d5c4d50       492588368
edi            0x444140 4473152
eip            0x80590dd        0x80590dd
eflags         0x296    [ PF AF SF IF ]
cs             0x23     35
ss             0x2b     43
ds             0x2b     43
es             0x2b     43
fs             0x0      0
gs             0x63     99

有人可以解释一下这是如何工作的?

1 个答案:

答案 0 :(得分:2)

这是测试Sign标志的一种奇怪方式。 JL指令用于测试CMP指令中的(减法)是否导致负值。

但是,如果结果设置了符号位,则TEST指令似乎也会设置SF标志。

http://en.wikipedia.org/wiki/TEST_(x86_instruction)