在没有 CMP 的情况下检查结果是否为 0?组装 x86 MASM

Checking if the result is 0 without CMP? Assembly x86 MASM

我有以下代码:

or edx,edx          (0 Or 0 would equal 0)
jz InvalidDivisor

如果我将代码更改为:

AND edx,edx            (0 and 0 would equal 0)
jz InvalidDivisor

这两种方法都不能检查乘积是否为 0 吗?

这两种方法都有效,但 test edx, edx 的作用相同,而且比其中任何一种都更地道。

它也可能更有效率,因为我猜想 orand 对 CPU 来说似乎它们可能会修改寄存器的值,因为 or edx, XXX 通常会这样做,而 CPU 可能不会检查这种特殊情况。这可能意味着后面使用 edx 值的指令必须停止,直到 or/and 完成执行,而使用 test 那些后面的指令可以继续执行并乱序执行而无需等待test 完成。