我有以下代码:
or edx,edx (0 Or 0 would equal 0)
jz InvalidDivisor
Run Code Online (Sandbox Code Playgroud)
如果我将代码更改为:
AND edx,edx (0 and 0 would equal 0)
jz InvalidDivisor
Run Code Online (Sandbox Code Playgroud)
两种方法都不能用于检查产品是否为 0?
这两者都有效,但test edx, edx作用相同,并且比其中任何一个都更惯用。
它也可能更有效,因为我猜想or或and会在 CPU 看来好像它们可能会修改寄存器的值,因为or edx, XXX通常会这样做,并且 CPU 可能不会检查这种特殊情况。这可能意味着使用 值的后面的指令edx必须暂停直到or/and完成执行,而test那些后面的指令可以继续执行并无序执行而无需等待test完成。
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |