Assembly 装配试验后的JL

Assembly 装配试验后的JL,assembly,Assembly,我看到以下代码- add $0x14,%esp mov %eax,%ebx test %ebx,%ebx jl 80590d7 <XXXX+0xbc7> 有人能解释一下这是如何工作的吗?这是一种奇怪的测试标志的方法。JL指令用于测试CMP指令中的(减法)是否导致负值 但是,如果结果设置了符号位,则测试指令似乎也设置了SF标志 jl与“相等”关系不大。它只是测试SF!=的test设置为false,SF设置为操作数1和操作数2的符号,因此实际上,如果ebx为负数

我看到以下代码-

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

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

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

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


jl
与“相等”关系不大。它只是测试SF!=的
test
设置为false,SF设置为
操作数1和操作数2
的符号,因此实际上,如果
ebx
为负数,它将跳转。我不知道他们为什么不直接写
js
。这会更有意义。上面的代码是icc编译器的反汇编代码。好的,但我仍然想不出任何原因。它甚至不能帮助宏运算融合-一个
js
也可以与一个
test
融合,就像
jl
一样。上面的代码是从icc编译器中反汇编的代码。
(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