assembly - instruction - ¿Cuál es el significado de XOR en ensamblaje x86?
push assembly (11)
Cuando comencé a programar hace mucho tiempo, no había un exclusivo o en el procesador o en el compilador. Cuando llegué a eso, me apegué a las descripciones:
- o: verdadero si a = 1 o b = 1 o ambos = 1
- xor: verdadero si a = 1 o b = 1 pero no ambos = 1
asi que:
0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1
y
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
Me estoy montando y sigo corriendo hacia xor, por ejemplo:
xor ax, ax
¿Simplemente borra el valor del registro?
Determina el OR eXclusivo lógico
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
Entonces, TRUE solo si una de las expresiones es verdadera, no ambas.
En este caso, borrará el registro ... XOR es un "exclusivo" o "..." así que si ax contiene 1010 y tu exclusivo o con 1010 obtendrás 0000 (despejado)
Si recuerdo correctamente xor ax, ax es una instrucción de ensamblaje de un byte, mientras que mov ax, 0 sería al menos 3 y probablemente demore un poco más en ejecutarse. Ciertamente llevará más tiempo decodificar que la instrucción xor.
xor = exclusivo o. Vea la definición de wikipedia para Exclusive or .
Si tiene un registro consigo mismo, lo pondrá a cero.
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
Tomemos el valor 41 como ejemplo (en binario):
101001
xor 101001
= 000000
xor ax, ax se utiliza para establecer ax en 0.
Motivo: por lo general, la instrucción xor en cualquier procesador toma menos bytes en el ensamblaje que utilizando movl 0,%ax
A XOR B
en inglés se traduciría como "son A y B no iguales". Entonces xor ax, ax
establecerá ax
en cero ya que ax siempre es igual a sí mismo.
A B | A XOR B
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0
xor ax, ax
es la forma más rápida posible de establecer el registro de hachas en 0
. Lo más rápido en términos de tamaño de instrucción y número de instrucciones. Para obtener detalles sobre cómo funciona, necesita un poco de conocimiento de la aritmética de bits.
La operación XOR entre dos bits devuelve 1 si uno y solo uno de los dos bits es 1; 0 de lo contrario. Otra forma de explicar es que devuelve 1 si los dos bits son diferentes; 0 de lo contrario.
La operación XOR entre dos números binarios de la misma longitud funciona también bit por bit. XOR dos números obtienes un número con bits establecidos en 1 donde los bits correspondientes de los dos operandos difieren, 0 cuando los bits correspondientes son iguales.
A partir de este conocimiento es bastante fácil ver que si los dos operandos son los mismos (ax y hacha por ejemplo) el resultado será 0.
xor reg, reg
se usa a menudo para borrar el registro. Puede ser una alternativa a mov reg, 0
AFAIR, fue más rápido (o más corto) en algunos casos.
Y, por supuesto, XOR en sí mismo es una operación EXCLUSIVA O (también conocida como: disyunción exclusiva) (pero es una pena describir aquí lo básico - use Wikipedia)
xor register, register
se usa comúnmente para ''cero'' un registro, porque todos los bits se comparan entre sí:
0 bits permanecen cero 1 bits se vuelven cero, porque 1 XOR 1 también es 0.
A B | XOR
0 0 | 0
1 0 | 1
0 1 | 1
1 1 | 0
La instrucción XOR realiza la operación anterior en cada par de bits en los dos operandos. Entonces 0xFF xor 0xFF
sería 0x00
y 0x55 xor 0xAA
sería 0xFF
. Y sí, xor ax ax
limpia ax
.