用汇编语言对 2 个字节进行异或运算

Ros*_*i98 1 assembly xor x86-16 emu8086

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

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

但是我怎么能做到 2 个字节呢?是否可以将它们中的每一个视为一个数组并逐位“比较”它们并将结果存储XOR在其他寄存器中?然后我怎样才能“隔离”这个结果的 3 个最重要的位?

Pet*_*des 5

是的,您在 XOR 的正确轨道上。与屏蔽两个输入以提供cmp.

mov   al, [a]
xor   al, [b]
test  al, 11100000B
Run Code Online (Sandbox Code Playgroud)

如果高 3 位匹配,将设置 ZF,所以你可以jz high_bits_match或其他什么。如果位掩码选择的任何位不同,ZF 将被清除,因为异或结果在那里将是非零的。

test根据其 args 的按位 AND 设置标志,就像and指令一样,但不写入任何输入操作数。(即它是一个 AND 指令,它丢弃结果并只设置标志。)

如果您确实想要 0 / 非零整数结果,则可以使用and代替test