You are on page 1of 6

Instrucciones bsicas 8086

Este listado no pretende ser un substituto del manual Intel de instrucciones del 8086 -del que fervientemente recomiendo una minuciosa lectura una vez que haya comprendido bien esto- sino la ms breve descripcin posible para poder avanzar un poco ms en los aspectos ms bsicos que se precisan para comprender el tutorial de lenguaje Assembly de +gthorne. 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 encolumnados 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 destino,fuente destino,fuente fuente destino destino,fuente destino,fuente tabla_fuente ;la nica instruccin que utiliza todos los tipos de direccionamiento ;Intercambia los contenidos de destino y 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 ;transfiere un puntero de 32 bits al registro DS y al registro destino ;transfiere un puntero de 32 bits al registro ES y al registro destino ;transfiere el offset de fuente (una direccin) a destino (un registro) ;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 destino,fuente destino,fuente destino,fuente destino,fuente fuente fuente ;suma fuente + destino y guarda el resultado en destino ;suma fuente + destino + Carry y guarda el resultado en destino ;resta destino - fuente y guarda el resultado en destino ;resta destino - fuente - Carry y guarda el resultado en destino ;multiplica AL o AX * fuente y guarda el resultado en DX:AX ;igual que la anterior pero con numeros enteros con signo

DIV IDIV AND OR XOR NOT NEG INC DEC DAA / DAS AAA/AAD/ AAM/AAS

fuente fuente destino,fuente destino,fuente destino,fuente destino destino destino destino

;divide DX:AX / fuente y guarda cociente en AX y resto en DX ;igual que la anterior pero con numeros enteros con signo ;opera destino AND fuente y guarda resultado en destino ;opera destino OR fuente y guarda el resultado en destino ;opera destino XOR fuente y guarda el resultado en 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 an 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 traves de carry a la izquierda contador veces ;rota destino a traves 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 numero 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 logica 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 SCAS SCASB string_destino,string_fuente string_destino,string_fuente string_destino,string_fuente string_fuente string_fuente string_fuente string_destino string_destino string_destino string_destino,string_fuente string_destino,string_fuente string_destino string_destino ;compara las dos cadenas de a bytes o words ;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)

MOVSW string_destino,string_fuente

SCASW

string_destino

;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 queREPZ, 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 direccin 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)

JNO JNP JNS JO JP JS JCXZ

offset offset offset offset offset offset offset

;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 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) ;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 anticracking 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. eidan yoson http://www.geocities.com/eidan.rm/conbasicos2.htm

You might also like