是否可以在汇编程序中对多个项进行异或?

时间:2011-10-01 23:03:31

标签: assembly xor

只是想知道是否可以在汇编程序中对多个字节进行异或。 你通常会这样做 异或,A 我只是不确定它会怎么做。 任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:4)

高级架构可能会为此提供指导。事实上,我之前设计的许多卫星都有一个16位的位掩码,它可以指定你想要用于这种操作的任意数量的寄存器:

xor r3, bitmask

将依次检查每个位,如果设置为1,则r3将与相关寄存器xor一起使用。然而,这只是作为预实现模拟器存在而且它被认为是不必要的。我猜他们认为让硅片手动更便宜。

高级汇编程序也可以提供此功能,也许允许您编写:

xor r1, r2, r3, r4, r5, r6

并将其转换为机器语言相当于:

xor r1, r2
xor r1, r3
xor r1, r4
xor r1, r5
xor r1, r6

当然,这不是机器代码级别的多参数指令,只是汇编程序更加智能化。它也不要与使用两个以上参数的实际指令混淆,其中一个作为目标,例如:

add r7, r3, r2     ; r7 = r3 + r2

但是,这通常是您通常会按顺序执行的操作,尤其是如果您未提前知道您提前使用的值:

xor al, bl
xor al, 0x11

如果您希望xor注册常量项,则可以事先xor将它们组合起来,因为xor是可交换:

(a xor b) xor c == a xor (b xor c)

例如,如果您希望xor注册0x11,然后0x12,则可以使用:

xor al, 0x03     ; 0x03 is (0x12 xor 0x11)