Ros*_*i98 1 assembly xor x86-16 emu8086
所以我得到了 2 个 8 位数字,我们称它们为a和b。如果前 3 位相同(因此是最重要的那些),我需要汇编程序(带有 16 位寄存器的 emu8086)对它们执行一些操作(我认为如果达到那个点我可以处理)。
我是组装新手,但最直接的解决方案似乎是XOR
,因为XOR
将为相同的输入提供 0 (0 xor 0 = 0, 1 xor 1 = 0) 和 1 对于不同的输入。
但是我怎么能做到 2 个字节呢?是否可以将它们中的每一个视为一个数组并逐位“比较”它们并将结果存储XOR
在其他寄存器中?然后我怎样才能“隔离”这个结果的 3 个最重要的位?
是的,您在 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
归档时间: |
|
查看次数: |
1173 次 |
最近记录: |