【问题标题】:Checking if the result is 0 without CMP? Assembly x86 MASM [duplicate]在没有 CMP 的情况下检查结果是否为 0?组装 x86 MASM [重复]
【发布时间】:2021-10-06 10:09:02
【问题描述】:

我有以下代码:

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

如果我把代码改成这样:

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

两种方法都不能用于检查产品是否为 0?

【问题讨论】:

    标签: assembly x86 masm


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多