如何解释x86-64 xor跟jle?

问题描述

如果部分汇编代码如下:

xor %ebp,%ebx
jle some address

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

解决方法

这是JLE实现的一种方式。根据手册,另一个是SF≠ OFhttps://www.felixcloutier.com/x86/jcc

由于XOR总是清除OF,因此SF != OF会减少为SF。

jle,如果SF | ZF,即结果为<= 0,则将执行布尔运算。

有趣的优化,可避免test %ebx,%ebx将结果与零(AND or TEST same,same sets FLAGS identically to cmp reg,0)进行比较。