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