如何解释 x86-64 xor 后跟 jle?

Cha*_*891 4 x86 assembly x86-64 eflags

如果部分汇编代码如下:

xor %ebp,%ebx
jle some address
Run Code Online (Sandbox Code Playgroud)

这个 jle 是否意味着它会在 (%ebx ^ %ebp == 0) 时跳转,因为这会将 ZF 设置为 1?

Pet*_*des 5

这是 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)。