问题描述
如果部分汇编代码如下:
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
,如果SF | ZF
,即结果为<= 0
,则将执行布尔运算。
有趣的优化,可避免test %ebx,%ebx
将结果与零(AND or TEST same,same sets FLAGS identically to cmp reg,0
)进行比较。