我正在进行组装,我一直在运行xor,例如:
xor ax, ax
是否只清除寄存器的值?
答案 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 0xFF
为0x00
,0x55 xor 0xAA
为0xFF
。是的,xor ax ax
会清除ax
。
答案 6 :(得分:2)
在这种情况下,它将清除寄存器... XOR是一个“独占或”......所以如果ax包含1010而你是独占或1010那你将得到0000(已清除)
答案 7 :(得分:2)
当我很久以前开始编程时,处理器或编译器中没有独占或处理。当我开始讨论时,我坚持说明:
这样:
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