You are on page 1of 7

Instrucciones bsicas 8086

Esta es una lista completa de instrucciones 8086 a las que slo le faltan las instrucciones ESC, LOCK y WAIT, que no son tiles a nuestros fines inmediatos. En la siguiente tabla se muestran por columnas los mnemnicos (como MOV), los operandos (como fuente, destino) y la descripcin de la operacin. Los operandos son combinaciones entre tipos (registro, memoria e inmediato) con los direccionamientos admitidos en cada instruccin. Las instrucciones IN y OUT admiten un cuarto tipo de operando: puertos de I/O, con direccionamiento registro o inmediato. Instrucciones de movimientos de datos
MOV XCHG XLAT LAHF SAHF LDS LES LEA PUSH POP PUSHF POPF PUSHA POPA IN OUT origen destino destino, fuente ;la nica instruccin que utiliza todos los tipos de direccionamiento destino, fuente ;Intercambia los contenidos de destino y fuente tabla_fuente ;carga el registro AL con el byte direccionado por (BX+AL) ;carga las flags S, Z, A, P y C en AH ;guarda AH en el registro de flags destino, fuente ;transfiere un puntero de 32 bits al registro DS y al registro destino destino, fuente ;transfiere un puntero de 32 bits al registro ES y al registro destino destino, fuente ;transfiere el offset de fuente (una direccin) a destino (un registro) fuente destino ;guarda fuente en el stack (en la direccin SS:SP) ;recupera del stack (direccin SS:SP-1) y guarda en registro destino ;almacena el registro de flags en/desde el Stack ;recupera el registro de flags en/desde el stack ; almacena los reg DI,SI,BP,SP,BX,DX,CX,AX en/desde el stack ;recupera los reg DI,SI,BP,SP,BX,DX,CX,AX en/desde el stack ;carga desde un puerto origen un byte o word en AL o AX ;escribe Al o AX en el puerto destino (direccionam. inmediato o DX)

Las operaciones aritmticas


ADD ADC SUB SUB MUL IMUL DIV IDIV AND OR destino, fuente ;suma fuente + destino y guarda el resultado en destino destino, fuente ;suma fuente + destino + Carry y guarda el resultado en destino destino, fuente ;resta destino - fuente y guarda el resultado en destino destino, fuente ;resta destino - fuente - Carry y guarda el resultado en destino fuente fuente fuente fuente ;multiplica AL o AX * fuente y guarda el resultado en DX:AX ;igual que la anterior pero con nmeros enteros con signo ;divide DX:AX / fuente y guarda cociente en AX y resto en DX ;igual que la anterior pero con nmeros enteros con signo

destino, fuente ;opera destino AND fuente y guarda resultado en destino destino, fuente ;opera destino OR fuente y guarda el resultado en destino

XOR NOT NEG INC DEC DAA / DAS AAA/AAD/ AAM/AAS

destino, fuente ;opera destino XOR fuente y guarda el resultado en destino destino destino destino destino ; El NOT cambia todos los 1 en 0 y los 0 en 1 de destino. ;NEG realiza el complemento a 2 de destino ;Incremente en 1 el contenido de destino ;Decrementa en 1 el contenido de destino ;Efecta el ajuste decimal en suma / resta del registro AL ;ajustan el registro AL a valor decimal desempaquetado (para aplicar en operaciones suma, resta, multiplicacin y divisin)

Instrucciones de rotacin
RCL RCR ROL ROR SAL SAR SHR destino, contador destino, contador destino, contador destino, contador destino, contador destino, contador destino, contador ;rota destino a travs de carry a la izquierda contador veces ;rota destino a travs de carry a la derecha contador veces ;rota destino a la izquierda contador veces ;rota destino a la derecha contador veces ;desplaza destino a la izquierda contador veces y rellena con ceros ;desplaza destino a la derecha contador veces y rellena con bit SF ;desplaza destino a la derecha contador veces y rellena con ceros

NOTAS SOBRE INSTRUCCIONES DE ROTACIN

El bit SF (signo) es el que est ms a la izquierda : si destino es operando es de 8 bits "SF" es el bit nmero 7 y si destino es un operando de 16 bits, es el bit nmero 15 En el procesador 8086 se permite un dato inmediato en lugar de especificar un registro como contador solo si ese dato inmediato es 1. Por lo tanto, para uno de esos procesadores la instruccin RCL AX, 1 es vlida mientras que la RCL AX, 5 no lo es. A partir de 80286 se puede especificar cualquier nmero de rotaciones como dato inmediato. Como DEBUG presupone 8086, cualquier valor inmediato distinto de 1 da error. Si en un programa para 8086 se desean rotar ms de un bit a la vez, el valor contador se carga en CL Para rotar un nibble (lo que es muy comn en la conversin de binario a BCD) es ms rpido y ocupa menos memoria si se utilizan 4 rotaciones de contador igual a 1 que si se utiliza el registro CL Las instrucciones SAL y SHL son equivalentes La flag de overflow cambia con una lgica precisa si la rotacin es de una posicin. En caso de rotaciones mayores, OVF queda indefinida. En los procesadores 80286 en adelante la rotacin se hace MODULO 32, es decir que se rotar la cantidad de veces igual al resto de la divisin contador/32, o sea que ROL AX, 33 equivale a ROL AX, 1 o ROL AX, 65. Una rotacin con CL=0 equivale a un NOP de dos bytes

Instrucciones de comparacin
CMP TEST destino, fuente destino, fuente ; compara fuente y destino. Modifica las flags V, Z, S, C, P y AC ; AND entre fuente y destino. Ninguno de los operandos cambia.

TEST modifica las mismas flags que CMP pero siempre deja a V = 0 y C = 0.

Instrucciones de strings
CMPS CMPSB CMPSW LODS LODSB LODSW STOS STOSB STOSW MOVS MOVSB MOVSW SCAS SCASB SCASW string_destino string_destino string_destino string_fuente string_fuente string_fuente string_destino string_destino string_destino string_destino, string_fuente ;compara las dos cadenas de a bytes o words string_destino, string_fuente ;origen y destino indicados por DS:SI y ES:DI (bytes) ;origen y destino indicados por DS:SI y ES:DI (words) ;mueve un byte o una word desde fuente a AL o AX ;origen indicado por DS:SI (mueve un byte a AL) ;origen indicado por DS:SI (mueve una word a AX) ;mueve un byte o una word al destino desde AL o AX ;destino indicado por ES:DI (mueve AL a un byte) ;destino indicado por ES:DI (mueve AX a una word) ;mueve un byte o word de fuente a destino ;origen y destino indicados por DS:SI y ES:DI (un byte) ;origen y destino indicados por DS:SI y ES:DI (una word) ;compara la cadena de destino con AL o AX ;destino indicado por ES:DI (compara AL con un byte) ;destino indicado por ES:DI (compara AX con una word)

En todos los casos, si se utiliza el prefijo REP, la cantidad de elementos de la cadena a operar est dada por el contenido del registro CX, si no es un solo elemento de la cadena. A cada operacin, CX es decrementado y SI y DI son incrementados o decrementados de acuerdo con el estado de la flag de direccin (Si D=0, se incrementan). El incremento o decremento de estos registros se hace de a uno si son operaciones de bytes o de a dos si son de a words. Para los casos en que se especifica el largo del operando con la B o W final, la string_destino est apuntada por ES:DI, la string_fuente est apuntada por DS:SI .

Instrucciones de repeticin
LOOP LOOPZ Offset offset ; Decrementa CX. Si CX no es cero, salta a offset (IP = IP + offset) ;Decrementa CX, Si CX <> 0 y Z = 1 , salta a offset (IP = IP + offset) ;decrementa CX, Si CX <> 0 y Z = 0 , salta a offset (IP = IP + offset)

LOOPNZ offset

En todos los casos, si no se produce el salto, se ejecuta la prxima instruccin REP REPZ instruccin instruccin ;decrementa CX y repite la siguiente instruccin MOVS o STOS hasta que CX=0 ; igual que REP, pero para CMPS y SCAS. Repite si la flag Z queda en 1 (igualdad) ;igual que REPZ, pero repite si la flag Z queda en 0 (las cadenas son distintas)

REPNZ instruccin

Instrucciones de salto
CALL RET INT INTO IRET JMP JA JAE JB JBE JZ JG JGE JL JLE JNC JNZ JNO JNP JNS JO JP JS direccin Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Destino Valor Nmero ; llama a procedimiento. IP <-- offset de destino y CS <-- segmento de destino ;retorna desde un procedimiento (el inverso de CALL), valor es opcional ; llamado a interrupcin. CS: IP <-- vector de INT. Las flags se guardan en el Stack ;llama a la INT 4 si la flag de overflow (V) est en 1 cuando se ejecuta la instruccin ;retorna de interrupcin al programa restaurando flags ;Salta incondicionalmente al lugar indicado por direccin ;salta a IP + offset si las flags C=0 Y Z=0 (salta si primer operando es mayor) ;salta a IP + offset si la flag C=0 (salta si primer operando es mayor o igual) ;salta a IP + offset si las flags C=1 (salta si primer operando es menor)(igual a JC) ;salta a IP + offset si las flags C=1 o Z=1 (salta si primer operando es menor o igual) ;salta a IP + offset si las flags Z=1 (salta si primer operando es igual al segundo)(=JE) ;salta a IP + offset si las flags S=V Y Z=0 (salta si primer operando es mayor) ;salta a IP + offset si las flags S=V (salta si primer operando es mayor o igual) ;salta a IP + offset si las flags S<>V (salta si primer operando es menor) ;salta a IP + offset si las flags S<>V o Z=1(salta si primer operando es menor o igual) ;salta a IP + offset si la flag C=0 (salta si no hay carry) ;salta a IP + offset si la flag Z=0 (salta si no son iguales o no es cero) ;salta a IP + offset si la flag V=0 (salta si no hay overflow) ;salta a IP + offset si la flag P=0 (salta si no hay paridad -o la paridad es impar =JPO) ;salta a IP + offset si la flag S=0 (salta si no hay bit de signo) ;salta a IP + offset si la flag V=1 (salta si hay desbordamiento -overflow) ;salta a IP + offset si la flag P=1 (salta si la paridad es par ) (=JPE) ;salta a IP + offset si la flag S=1 (salta si el signo es negativo)

JCXZ

Offset

;salta a IP + offset si la flag CX=0 (salta si el registro CX es cero)

Las instrucciones de saltos por Above o Below se refieren entre dos valores sin signo (JA, JAE, JB y JBE), mientras que las Greater y Less se refieren a la relacin entre dos valores con signo (JG, JGE, JL y JLE). .

Instrucciones que afectan flags


CLC/CMC/STC ;pone a cero / complementa / pone en 1 la flag C (carry) CLD/STD CLI/STI ;pone a cero / uno la flag de direccin (D=0 hace que SI y DI se incrementen) ;deshabilita / habilita las interrupciones por hardware enmascarables

Instrucciones miscelneas
NOP CBW CWD HLT ;no-operacin: el procesador pasa a la instruccin siguiente sin hacer nada ;convierte el byte de AL en palabra (AX), copiando el bit 7 a todo el registro AH ;convierte word en double-word, copiando bit 15 de AX a todo el registro DX ; el procesador se detiene hasta que llegue un Reset o una interrupcin por hard.

Alguien puede preguntarse para qu puede servir una instruccin que no hace absolutamente nada como la NOP. Simplemente para llenar espacio, y es realmente una de las instrucciones ms tiles para un cracker, a punto tal que algunos mecanismos anti cracking sofisticados buscan durante la ejecucin de un programa si alguien lo arregl sustituyendo algunas instrucciones por NOPs, y en caso de detectarlo, abortan la ejecucin. Pero esto es tema para ms adelante.

You might also like