小编kan*_*o73的帖子

x86 ASM:超过 1 位的 TEST 指令

我正在使用汇编 TEST 指令,但目前它让我感到困惑。

AX=1110xB

当测试单个位时,

如果已设置,则 zf=0(即 TEST AX,0001xB)

如果未设置则 zf=1(即 TEST AX,0010xB)

此时一切正常,但问题(或我的困惑)是当我想在单个 TEST 指令中测试多个位时。如果仅设置了测试位之一,则 zf=0。例如:

AX=1110xB

TEST AX,0110xB -> zf=0(两个位均已设置)

TEST AX,0011xB -> zf=0(只设置了 1 位,但我要求 2 位)

TEST AX,1110xB -> zf=0(三位已设置)

问题是:如何测试多个位并仅当所有测试位均为“1”时才期望得到正结果(zf=0)?例如,在 C/C++ 中,当您使用逻辑 & 来检查位掩码 (10101101&00000101)...或者我应该在汇编中一次测试一位?

如果未设置位,我的程序会给出“负”,但如果至少设置了 1 位并且并非所有测试的位都为 1,则给出“正”。

我尝试使用两种不同的调试器,结果是相同的。

感谢您的意见

x86 assembly

1
推荐指数
1
解决办法
833
查看次数

标签 统计

assembly ×1

x86 ×1