language instruction inc for arithmetic assembly xor

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 .