我正在进行组装,我一直在运行xor,例如:
xor ax, ax
Run Code Online (Sandbox Code Playgroud)
它只是清除了寄存器的值吗?
orl*_*rlp 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
Run Code Online (Sandbox Code Playgroud)
Luk*_*asz 19
xor reg, reg
通常用于清除注册.它可以替代mov reg, 0
AFAIR,在某些情况下更快(或更短).
当然,XOR本身就是eXclusive OR(又名:独占分离)操作(但是在这里描述这样的基础是一种耻辱 - 使用维基百科)
Sal*_*n A 12
xor ax, ax
是设置ax寄存器的最快方法0
.最快的指令大小和指令数量.有关它如何工作的详细信息,您需要一点位算术知识.
如果两个位中的一个且仅两个中的一个为1,则两位之间的XOR操作返回1; 否则为0.另一种解释方法是,如果两个位不同,则返回1; 否则为0.
两个相同长度的二进制数之间的XOR运算同样在逐位的基础上工作.XOR两个数字得到一个数字,其中位设置为1,其中两个操作数的相应位不同,0当相应的位相同时.
从这些知识中可以很容易地看出,如果两个操作数是相同的(例如ax和ax),结果将为0.
异或=异或。请参阅维基百科对Exclusive 或 的定义。
如果你对一个寄存器进行异或,它会将该寄存器归零。
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
Run Code Online (Sandbox Code Playgroud)
我们以值 41 为例(二进制):
101001
xor 101001
= 000000
Run Code Online (Sandbox Code Playgroud)