En x86 la instrucción NOP
esXCHG AX, AX
Las 2 instrucciones mnemónicas se reúnen para la misma op- binario código.
(En realidad, supongo que un ensamblador podría usar cualquier
xchg
de un registro consigo mismo, pero
AX
o
EAX
es lo que normalmente se usa para el
nop
hasta donde yo sé).
xchg ax, ax
tiene las propiedades de cambiar los valores de registro y no cambiar las banderas (hey - it's a op!).
Editar (en respuesta a un comentario de Anon.):
Ah, claro - Ahora recuerdo que hay varias codificaciones para la instrucción xchg
. Algunos toman un conjunto de bits mod/r/m (como muchas instrucciones de arquitectura Intel x86) que especifican una fuente y un destino. Esas codificaciones toman más de un byte. También hay una codificación especial que usa un solo byte e intercambia un registro de propósito general con (E)AX
. Si el registro especificado también es (E)AX
si tiene una instrucción NOP de un solo byte. también puede especificar que (E)AX
se intercambie consigo mismo utilizando la variante más grande de la instrucción xchg
.
supongo que MSVC utiliza la versión de múltiples bytes de xchg
con (E)AX
como el origen y el destino cuando se quiere masticar más de un byte para ninguna operación - que lleva el mismo número de ciclos como el único byte xchg
, pero usa más espacio. En el desmontaje no verá el byte múltiple xchg
decodificado como NOP
, incluso si el resultado es el mismo.
Específicamente xchg eax, eax
o nop
podría codificarse como códigos de operación o 0x90
0x87 0xc0
dependiendo de si usted quiere que utilizar hasta 1 o 2 bytes. El desensamblador de Visual Studio (y probablemente otros) decodificará el código de operación 0x90
como la instrucción NOP
y decodificará el código de operación 0x87 0xc0
como xchg eax, eax
.
Ha sido un tiempo desde que he hecho trabajos que se detallan en lenguaje ensamblador, lo más probable es que estoy equivocado en al menos un recuento aquí ...
¿Los bytes asociados con estas instrucciones son los mismos? nop debe ser hex 90. ¿xchg ax, ax a 2 byte instruction? –
Esto resultó ser una pregunta con un poco más de matiz de lo que originalmente pensé (o recuerdo de todos modos). –
oye, ¿puedes decirme cómo mirar el código de ensamblaje como el tuyo? Me gustaría ver cómo un simple prgoram se convierte en ensamblaje. gracias – masfenix