如果部分汇编代码如下:
xor %ebp,%ebx
jle some address
这个 jle 是否意味着它会在 (%ebx ^ %ebp == 0) 时跳转,因为这会将 ZF 设置为 1?
这就是 JLE 可以实现的方式之一。另一种是SF≠ OF
,根据手册:
https ://www.felixcloutier.com/x86/jcc
由于 XOR 总是清除 OF,SF != OF
减少到只有 SF。
jle
if 之后会执行一个布尔运算SF | ZF
,即如果结果是<= 0
.
有趣的优化以避免test %ebx,%ebx
将结果与零进行比较(AND 或 TEST 相同,将 FLAGS 设置为相同cmp reg,0
)。