Olvera Carreño Rodrigo Alejandro Estructura y Programación de Computadoras
Formato de Instrucción de los Procesadores Intel
Los valores de los bytes en la parte inferior son la longitud de cada una de las unidades.
En palabras sencillas, una instrucción es un código con cuatro posibles prefijos y cuatro
sufijos opcionales.
De izquierda a derecha:
-Prefijo de instrucción. Se considera como un modificador. Estos son todos los prefijos de
instrucción posibles y algunas de las limitaciones de su uso:
F3h : REP, REPE y REPZ: Se usan sólo con operaciones con cadenas (stosb, movsb, etc)
F2h: REPNE y REPNZ: De nuevo, sólo se usan con operaciones con cadenas
F0h: LOCK: Se usa sólo con:
BT, BTS, BTR, BTC (modos de operando 'mem, reg/imm')
XCHG (modos de operando 'reg, mem' y 'mem, reg')
ADD, OR, ADC, SBB (modos de operando 'mem, reg/imm')
AND, SUB, XOR (todos los modos de operando)
NOT, NEG, INC, DEC (en operando 'mem')
-Prefijo de tamaño de dirección.
-Prefijo de tamaño de operando.
-Anulación de segmento. Se necesita en instrucciones como 'mov ax, fs:[eax]' donde el
segmento se encuentra anulado. Estos son los bytes de segmento anulado disponibles así
como el segmento que anula cada uno:
2Eh CS
36h SS
3Eh DS
26h ES
64h FS
65h GS
Olvera Carreño Rodrigo Alejandro Estructura y Programación de Computadoras
-Código de operación. Es un byte que representa la instrucción a ejecutarse.
Desafortunadamente son tantos los códigos que existen que es imposible listarlos todos,
sin embargo, algunos de ellos son públicos en la página de internet "developer.intel.com".
-Byte de Registro/Memoria. Este es el byte más complejo de todos y depende del código de
operación. Su propósito es el de decirle al código de operación qué operando utilizar. Es
algo así:
El espacio de "Mod" básicamente dice qué tipo de direccionamiento el código de operación
debe utilizar. La sección Reg/Opcode mantiene un valor para un registro ó tres bits extras
del código de operación. El campo de R/M contiene otro registro ó un operando de
memoria. Así luce cada registro:
000 AL, AX, EAX
001 CL, CX, ECX
010 DL, DX, EDX
011 BL, BX, EBX
100 AH, SP, ESP
101 CH, BP, EBP
110 DH, SI, ESI
111 BH, DI, EDI
-Byte de escala, índice, base. Este byte permite hacer cosas como '[EAX*8]' a la dirección
de memoria. Su formato es sencillo:
La escala es un valor de dos bits que representan una escala de 1(00), 2 (01), 4(10) u 8(11).
El índice es un registro, denotado por la tabla del punto anterior. La base a su vez es un
registro.
-Desplazamiento. El desplazamiento puede ser un desplazamiento de 1, 2 o 4 bytes para
una instrucción en particular.
-El campo inmediato. Contiene una instrucción inmediata para ser procesada.
Top Related