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

时间:2018-06-08 09:23:17

标签: assembly x86-16 xor emu8086

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

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

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

1 个答案:

答案 0 :(得分:3)

是的,你在XOR的正确轨道上。这样可以比屏蔽两个输入以提供cmp更有效率。

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

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

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

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