4

如果部分汇编代码如下:

xor %ebp,%ebx
jle some address

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

4

1 回答 1

5

这就是 JLE 可以实现的方式之一。另一种是SF≠ OF,根据手册: https ://www.felixcloutier.com/x86/jcc

由于 XOR 总是清除 OF,SF != OF减少到只有 SF。

jleif 之后会执行一个布尔运算SF | ZF,即如果结果是<= 0.

有趣的优化以避免test %ebx,%ebx将结果与零进行比较(AND 或 TEST 相同,将 FLAGS 设置为相同cmp reg,0)。

于 2020-11-07T08:08:54.353 回答