用汇编语言异或 2 个字节

XOR-ing 2 bytes in assembly language

所以我得到了 2 个 8 位数字,我们称它们为 ab。我需要汇编程序(带有 16 位寄存器的 emu8086)对它们执行一些操作(我想如果达到那个点我可以处理)if 前 3 位是相同的(所以最重要的)。

我是汇编新手,但最直接的解决方案似乎是 XOR,因为 XOR 将为相同的输入提供 0 (0 xor 0 = 0, 1 xor 1 = 0) 和 1 用于不同的输入。

但是我怎样才能为 2 个字节做到这一点?是否可以将它们中的每一个都视为一个数组并且 'compare' 他们一点一点地存储 XOR 的结果在其他寄存器中?然后我怎么才能 'isolate' 只有这个结果的 3 个最高有效位?

是的,您在 XOR 方面走在了正确的轨道上。这比屏蔽两个输入以馈送 cmp.

更有效
mov   al, [a]
xor   al, [b]
test  al, 11100000B
如果高 3 位匹配,

将设置 ZF,因此您可以 jz high_bits_match 或其他。如果位掩码选择的任何位不同,ZF 将被清除,因为那里的异或结果将非零。

test 根据其参数的按位与设置标志,类似于 and 指令,但不写入任何输入操作数。 (即它是丢弃结果并仅设置标志的 AND 指令。)

如果您确实想要 0/非零整数结果,您可以只使用 and 而不是 test