在没有 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
的作用相同,而且比其中任何一种都更地道。
它也可能更有效率,因为我猜想 or
或 and
对 CPU 来说似乎它们可能会修改寄存器的值,因为 or edx, XXX
通常会这样做,而 CPU 可能不会检查这种特殊情况。这可能意味着后面使用 edx
值的指令必须停止,直到 or/and
完成执行,而使用 test
那些后面的指令可以继续执行并乱序执行而无需等待test
完成。
我有以下代码:
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
的作用相同,而且比其中任何一种都更地道。
它也可能更有效率,因为我猜想 or
或 and
对 CPU 来说似乎它们可能会修改寄存器的值,因为 or edx, XXX
通常会这样做,而 CPU 可能不会检查这种特殊情况。这可能意味着后面使用 edx
值的指令必须停止,直到 or/and
完成执行,而使用 test
那些后面的指令可以继续执行并乱序执行而无需等待test
完成。