4

我看到以下代码 -

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

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

4

1 回答 1

2

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

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

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

于 2012-06-01T18:23:50.920 回答