x86汇编中XOR的含义是什么?

时间:2011-01-20 16:14:23

标签: assembly xor

我正在进行组装,我一直在运行xor,例如:

xor     ax, ax

是否只清除寄存器的值?

11 个答案:

答案 0 :(得分:48)

英语中的

A XOR B将翻译为“A和B不相等”。因此,xor ax, ax会将ax设置为零,因为ax总是等于它自己。

A B | A XOR B
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0

答案 1 :(得分:18)

xor reg, reg通常用于清除注册。它可以替代mov reg, 0

AFAIR,在某些情况下更快(或更短)。

当然,XOR本身就是独立的(或者说是独家分离)操作(但是在这里描述这样的基础是一种耻辱 - 使用维基百科)

答案 2 :(得分:12)

xor ax, ax是将ax寄存器设置为0的最快方法。最快的指令大小和指令数量。有关它如何工作的详细信息,您需要一点位算术知识。

如果 1,则两位之间的XOR运算返回1,并且两位中只有一个为1;否则为0。另一种解释方法是,如果两个位不同,则返回1;否则为0。

相同长度的两个二进制数之间的XOR运算同样在逐位的基础上工作。 XOR两个数字得到一个数字,其中位设置为1,其中两个操作数的相应位不同,相应位相同时为0。

从这些知识中可以很容易地看出,如果两个操作数是相同的(例如ax和ax),结果将为0。

答案 3 :(得分:6)

xor register, register通常用于将寄存器“​​归零”,因为所有位都相互比较:

0位保持为零。 1位变为零,因为1 XOR 1也为0。

答案 4 :(得分:4)

xor = exclusive或。请参阅维基百科对Exclusive or的定义。

如果您将寄存器与其自身对齐,它将使该寄存器归零。

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

我们以值41为例(二进制):

    101001
xor 101001
  = 000000

答案 5 :(得分:3)

A B | XOR
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0

XOR指令对两个操作数中的每对位执行上述操作。因此0xFF xor 0xFF0x000x55 xor 0xAA0xFF。是的,xor ax ax会清除ax

答案 6 :(得分:2)

在这种情况下,它将清除寄存器... XOR是一个“独占或”......所以如果ax包含1010而你是独占或1010那你将得到0000(已清除)

答案 7 :(得分:2)

当我很久以前开始编程时,处理器或编译器中没有独占或处理。当我开始讨论时,我坚持说明:

  • 或:如果a = 1或b = 1或两者= 1
  • ,则为true
  • xor:如果a = 1或b = 1但不是两者都= 1
  • ,则为true

这样:

0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1

0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0

答案 8 :(得分:1)

它确定逻辑eXclusive OR

0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0

因此,仅当其中一个表达式为真时才为TRUE,而不是两者。

答案 9 :(得分:1)

如果我没记错 xor ax,ax 是一个单字节汇编指令,而 mov ax,0 至少为3,执行时间可能稍长。解码肯定比xor指令要长。

答案 10 :(得分:1)

xor ax,ax用于将ax设置为0。

原因:与使用movl 0,%ax

相比,通常任何处理器上的xor指令在汇编时占用的字节数更少