Vous êtes sur la page 1sur 16

INTRODUCCIN

El cerebro del ordenador es el procesador. Su funcin es ejecutar los programas almacenados en la memoria principal tomando las instrucciones, examinndolas y ejecutndolas una tras otra. El Set de Instrucciones del 8086/8088 es una amplia herramienta donde podemos encontrar todo lo que necesitamos para poder trabajar y programar con el lenguaje Ensamblador para los microprocesadores 8086/88. Este set lo podemos encontrar divido en cuatros (4) tipos diferentes que el procesador trabaja: 1. 2. 3. 4. Instrucciones de Transferencias de Datos. Instrucciones de Control de Programa. Instrucciones de Clculo. Instrucciones del Microprocesador.

Otra rama importante son los modos de direccionamiento que tiene el microprocesador, ya que este nos permite distinguir entre lo que queremos hacer y como lo queremos hacer. Estos son: 1. 2. 3. 4. 5. Direccionamiento Inmediato Direccionamiento a Registro Direccionamiento Directo Direccionamiento de Registro Indirecto, entre otros. Los registros del microprocesador son de 16 bits (2 bytes) y el bus de direcciones son de 20 bits.

Tambin se menciona el sistema numrico del microprocesador, el cual podemos utilizarlo como binario, hexadecimal o decimal, como tambin existe las constantes.

SET DE INSTRUCCIONES 8086/8088


INSTRUCCIONES DE TRANSFERENCIAS DE DATOS Estas instrucciones mueven datos de una parte a otra del sistema; desde y hacia la memoria principal, de y a los registros de datos, puertos de E/S y registros de segmentacin. Las instrucciones de transferencias de datos son las siguientes: MOV: Mover datos. Descripcin: Transfiere datos entre dos registros o entre un registro y memoria, y permite llevar datos inmediatos a un registro o a memoria. Banderas: No las afecta. Formato: MOV (registro/memoria), (registro/memoria/inmediato). Ejemplo: MOV AX, 54AFH Nota: Las operaciones MOV no permitidas son de memoria a memoria, inmediatos a registro de segmento y de registro de segmentos a registro de segmento. XCHG: Intercambiar datos. Descripcin: Intercambia datos entre dos registros o entre un registro y memoria. Banderas: No las afecta. Formato: XCHG (registro/memoria), (registro/memoria). Ejemplo: XCHG AL, AH PUSH: Guardar en la pila. Descripcin: Guarda en la pila una palabra para su uso posterior. SP apunta al tope de la pila; PUSH decrementa SP en 2 y transfiere la palabra a SS: SP. Banderas: No las afecta. Formato: PUSH (registro/memoria/inmediato(solo 286 o posteriores)). Ejemplo: PUSH DX POP: Sacar una palabra de la pila. Descripcin: Saca de la pila una palabra previamente guardada y la enva a un destino especificada. SP apunta al tope de la pila; POP la transfiere al destino especificado e incrementa SP en 2. Banderas: No las afecta. Formato: POP (registro(excepto CS, se debe usar RET)/memoria). Ejemplo: POP BX

PUSHF: Guardar en la pila las banderas. Descripcin: Guarda en la pila el contenido del registro de banderas para su uso posterior. Banderas: No las afecta. Formato: PUSHF (sin operandos). Ejemplo: PUSH POPF: Sacar de la pila las banderas. Descripcin: Saca una palabra de la pila y la manda al registro de estado. Banderas: Afecta a todas. Formato: POPF (sin operandos). Ejemplo: POPF LEA: Cargar direccin efectiva. Descripcin: Carga una direccin cercana en un registro. Banderas: No las afecta. Formato: LEA registro, memoria Ejemplo: LEA AX, MEN1 Nota: La instruccin LEA AX, MEN1 es equivalente a MOV AX, OFFSET MEN1. Sin embargo, no siempre ocurre as, por ejemplo, LEA DX, [SI + datos] corresponde a MOV DX, OFFSET datos, ms la instruccin ADD DX, SI. LDS: Cargar registro del segmento de datos. Descripcin: transfiere un puntero de 32 bits al registro DS y al registro destino. Banderas: No las afecta. Ejemplo: LDS dest, src LES: Cargar registro de segmento extra. Descripcin: Transfiere un puntero de 32 bits (direccin completa por desplazamiento y segmento, en este orden) correspondiente al segundo operando (que debe ser un operando de memoria de doble palabra). Banderas: No las afecta. Ejemplo: LES dest, src

LAHF: Carga AH con banderas. Descripcin: Copia las banderas SF, ZF, AF, PF y CF en los bits 7, 6, 4, 2 y 0 respectivamente del registro AH. Los otros bits quedan indefinidos. El contenido de AH queda, entonces, asi: AH = SF ZF xx AF xx PF xx CF. Ejemplo: LAHF SAHF: Guarda AH en las banderas. Descripcin: Transfiere bits especficos del registro AH a los registro de bandera SF, ZF, PF y CF. Banderas: AF, CF, PF, SF, ZF. Ejemplo: SAHF XLAT: Traducir usando tabla. Descripcin: Realiza un posicionamiento sobre una tabla de bytes para obtener el valor correspondiente a un ndice. El valor de AL se usa como ndice (desplazamiento) sobre la tabla. El valor correspondiente se carga sobre el propio AL. Se supone que el registro BX apunta al comienzo de la tabla. La longitud mxima de la tabla es de 256 bytes. El primer bytes de la tabla tiene el desplazamiento cero. La tabla debe de ser de tipo bytes. Uso: MOV AL, [BX + AL]. Ejemplo: XLAT tabla-translacin. OUT: Salida de byte o palabra. Descripcin: Transfiere un byte o una palabra del registro AL o AX a una puerta de salida del procesador. El nmero de la puerta se puede especificar mediante: un valor fijo (0 a 255) y un valor variable, el contenido en el registro DX (0 a 65635), pudindose acceder a 64K puertos de salida. Banderas: Ninguna. Ejemplo: OUT port, accum IN: Entrada de byte o palabra. Descripcin: Transfiere un byte o una palabra de una puerta de entrada del procesador al registro AL o AX, respectivamente. El nmero de la puerta se puede especificar mediante: un valor fijo (0 a 255) y un valor variable, el contenido en el registro DX (0 a 65635), pudindose acceder a 64K puertos de salida. Banderas: Ninguna. Ejemplo: IN accum, port

INSTRUCCIONES CONTROL DE BUCLES Estas posibilitan el grupo de control ms elemental de nuestros programas. DEC: Disminuye en uno. Descripcin: Disminuye en 1 de un byte o una palabra en un registro o memoria. Banderas: AF, OF, PF, SF y ZF. Formato: DEC (registro/memoria). Ejemplo: DEC DL INC: Incrementa en uno. Descripcin: Incrementa en 1 de un byte o una palabra en un registro o memoria. Banderas: AF, OF, PF, SF y ZF. Formato: INC (registro/memoria). Ejemplo: INC (1B15H)
LOOP: Repetir Descripcin: Controla la ejecucin de un grupo de instrucciones, un numero especifico de veces. Antes de iniciar el ciclo, CX debe contener el nmero de veces que ha de repetirse. LOOP aparece al final del conjunto de instrucciones que se repiten y decrementa CX. Al llegar a cero, permite que el flujo de ejecucin pase a la siguiente instruccin. En caso contrario salta a la etiqueta que determina el comienzo del bucle. Banderas: No las afecta. Formato: LOOP etiqueta Ejemplo: MOV CX, nmero de veces Etiqueta: Instrucciones del ciclo LOOP Etiqueta Nota: LOOPZ/LOOPE (realiza un ciclo si es cero) tienen la misma funcin que LOOP, pero la condicin para seguir dentro del ciclo es que CX = 0 o Z = 0. Para LOOPNZ/LOOPZ (realiza un ciclo sino es cero) la condicin es CX = 0 o Z = 1.

INSTRUCCIONES ARITMTICAS
Sirven para llevar a cabo operaciones aritmticas manipulando los registros y las posiciones de memoria. ADD: Sumar nmeros binarios Descripcin: Suma nmeros binarios desde la memoria, registro o inmediato a un registro, o suma nmeros en un registro o inmediato a memoria. Los valores pueden ser un byte o una palabra. Banderas: AF, CF, OF, PF, SF y ZF. Formato: ADD (registro/memoria), (registro/memoria/inmediato). Ejemplo: ADD DL, AL ADC: Sumar con acarreo. Descripcin: Por lo comn es usado en suma de mltiples palabras binarias para acarrear un bit en el siguiente paso de la operacin. ADC suma el contenido de la bandera CF al primer operando y despus suma el segundo operando al primero, al igual que ADD. Banderas: AF, CF, OF, PF, SF y ZF. Formato: ADC (registro/memoria), (registro/memoria/inmediato). Ejemplo: ADC AX, CX SUB: Restar nmeros binarios. Descripcin: Restar nmeros binarios en un registro, memoria o inmediato de un registro, o resta valores en un registro o inmediato de memoria. Banderas: AF, CF, OF, PF, SF y ZF. Formato: SUB (registro/memoria), (registro/memoria/inmediato). Ejemplo: SUB AL, CL SBB: Restar con acarreo. Descripcin: Normalmente, se usa esta operacin en la resta binaria de multiples palabras para acarrear el bit uno de desbordamiento al siguiente paso de la aritmtica. SBB resta primero el contenido de la bandera CF del primer operando y despus el segundo operando del primero, de manera similar a SUB. Banderas: AF, CF, OF, PF, SF y ZF. Formato: SBB (registro/memoria), (registro/memoria/inmediato). Ejemplo: SBB AX, CX

MUL: Multiplicar sin signo. Descripcin: Multiplica dos operandos sin signo. Banderas: CF y OF (AF, PF, SF y ZF quedan indefinidas). CF = OF = 1 -> AH 0 Formato: MUL (registro/memoria). Ejemplo: MUL BX ; Con 16 bits, DX * AX IMUL: Multiplicar con signo (enteros) Descripcin: Multiplica dos operandos con signo. IMUL trata el bit de ms a la izquierda como el signo. Banderas: CF y OF (AF, PF, SF y ZF quedan indefinidas). CF = OF = 1 -> AH 0 Formato: IMUL (registro/memoria). Ejemplo: IMUL BX ; Con 16 bits. DIV: Dividir sin signo Descripcin: Divide un dividendo sin signo entre un divisor sin signo. La divisin entre cero provoca una interrupcin de divisin entre cero. Banderas: AF, CF, OF, PF, SF y ZF quedan indefinidas. Formato: DIV (registro/memoria). Ejemplo: DIV CX; Con 16 bits IDIV: Dividir con signo Descripcin: Divide un dividendo con signo entre un divisor con signo. La divisin entre cero provoca una interrupcin de divisin entre cero. IDIV trata el bit de la izquierda como el signo. Banderas: AF, CF, OF, PF, SF y ZF quedan indefinidas. Formato: IDIV (registro/memoria). Ejemplo: IDIV CX; Con 16 bits NEG: Niega Descripcin: Invierte un numero binario de positivo a negativo y viceversa. NEG trabaja realizando el complemento a dos. Banderas: AF, CF, OF, PF, SF y ZF. Formato: NEG (registro/memoria). Ejemplo: NEG AL

INSTRUCCIONES LGICAS Y DE MANEJO DE BITS


Se trata de instrucciones para realizar operaciones lgicas con los datos tales como AND, OR, XOR, etc., as como manipulacin de los mismos a nivel de bits. AND: Conjuncin lgica. Descripcin: Realiza la conjuncin lgica de los bits de los operandos. Banderas: CF (0), OF (0), PF, SF y ZF (AF queda indefinida). Formato: AND (registro/memoria), (registro/memoria, inmediato). Ejemplo: AND AL, BL NOT: Negacin lgica. Descripcin: Complementa todos los bits del operando. Banderas: No las afecta. Formato: NOT (registro/memoria). Ejemplo: NOT DX XOR: Disyuncin exclusiva. Descripcin: Operacin "o lgico exclusivo" a nivel de bit entre los dos operandos. El resultado no almacena en destino. Banderas: CF (0), OF (0), PF, SF y ZF (AF queda indefinida). Formato: XOR (registro/memoria). Ejemplo: XOR DL, AL Operacin 1 0 0 1 1 Operacin 2 0 1 0 1 Destino 0 1 1 0

CMP: Comprar Descripcin: Se emplea para comparar el contenido de dos campos de datos. CMP resta el segundo operando del primero y actualiza las banderas, pero no guarda el resultado. Banderas: AF, CF, OF, PF, SF y ZF. Formato: CMP (registro/memoria), (registro/memoria/inmediato). Ejemplo: CMP Al, 12H

TEST: Examinar bits Descripcin: Operacin similar a CMP pero a nivel de bits. TEST realiza un AND lgico de los dos operandos para establecer el valor de las banderas pero sin almacenar el resultado. Banderas: CF (0), OF (0), PF, SF y ZF (AF queda indefinida). Formato: TEST (registro/memoria), (registro/memoria/inmediato). Ejemplo: TEST AL, 11110000B

Nota: TEST modifica las mismas banderas que CMP pero siempre deja a V = 0 y C = 0. INSTRUCCIONES DE MANEJO DE BITS
Bsicamente permiten multiplicar y dividir por potencias de 2. El formato general de este tipo de instrucciones es el siguiente: Operacin_Movimiento_Bits (registro/memoria), (CL, 1) La operacin indicada se aplicara al primer operando el nmero de veces que especifica el segundo operando. SHR: Desplazamiento lgico a la derecha. Descripcin: Se mueven todos los bits a la derecha, en el bit ms significativo se mete un cero, y el bit que sale por la derecha pasa a la bandera CF. SAR: Desplazamiento aritmtico a la derecha. Descripcin: Se mueven todos los bits a la derecha, en el bit ms significativo se mete en la bandera SF, y el bit que sale por la derecha pasa a la bandera CF. SHL: Desplazamiento lgico a la izquierda. Descripcin: Se mueven todos los bits a la izquierda, en el bit menos significativo se mete un cero, y el bit que sale por la izquierda pasa a la bandera CF.

SAL: Desplazamiento aritmtico a la izquierda (igual que SHL). ROR: Rotacin lgica a la derecha. Descripcin: Se mueven todos los bits a la derecha, en el bit ms significativo se mete el bit
que sale por la derecha, que se copia tambin en la bandera CF . RCR: Rotacin a la derecha con acarreo. Descripcin: Se mueven todos los bits a la derecha, en el bit ms significativo se mete el valor de la bandera CF, y el bit que sale por la derecha pasa a ser el nuevo valor de la bandera CF.

ROL: Rotacin lgica a la izquierda. Descripcin: Se mueven todos los bits a la izquierda, en el bit menos significativo se mete el bits que sale por la izquierda, que se copia tambin en la bandera CF . RCL: Rotacin a la izquierda con acarreo. Descripcin: Se mueven todos los bits a la izquierda, en el bit menos significativo se mete el valor de la bandera CF, y el bit que sale por la izquierda pasa a ser el nuevo valor de la bandera CF.

INSTRUCCIONES DE TRANSFERENCIA DE CONTROL Dentro de esta categora, se puede distinguir entre instrucciones de transferencia de control condicionales e incondicionales. Las condicionales provocan una alteracin en la secuencia normal de ejecucin del programa, haciendo que el flujo de ejecucin salte de un punto del programa a otro sin que ambos sean consecutivos, dependiendo de que cumpla o no una determinada condicin relacionada normalmente con el registro de estado. Las incondicionales tienen el mismo efecto pero sin depender de los valores que en ese momento tengan las banderas del registro de estado. Instrucciones de Transferencia de Control Condicionales JE: Saltar si es igual. JA: Saltar si es Superior. Entre otras. Instrucciones de Transferencia de Control Incondicionales
JMP: Salto incondicional. Descripcin: Salta a la direccin designada (operando). La direccin especificada puede ser corta (128 a + 127 bytes), cercana (dentro de 32K) o lejana (a otro segmento). Banderas: No las afecta. Formato: JMP (registro/memoria). Ejemplo: JMP FINAL

LLAMADA A PROCEDIMIENTOS. Dentro del segmento de cdigo es posible tener cualquier nmero de procedimientos. Un procedimiento (o subrutina) es una seccin de cdigo que realiza una tarea bien definida y clara (por ejemplo, situar el cursor en una posicin concreta de la pantalla). La utilizacin de procedimientos en los programas es aconsejable porque: Reduce el nmero de lneas de cdigo. Permite una mejor organizacin del programa. Facilita la localizacin de errores. Aumenta la legibilidad del programa.

CALL: Llamar a un procedimiento. Descripcin: Llama a un procedimiento cercano o lejano. En una llamada a un procedimiento cercano se guarda en la pila IP. Despus se carga el IP con el desplazamiento de la direccin de destino (donde se encuentra la primera instruccin del procedimiento). Si la llamada es a un procedimiento lejano, el proceso a seguir es el mismo pero ahora el tratamiento de las direcciones incluye tambin considerar el registro de segmento CS. Banderas: No las afecta. Formato: CALL (registro/memoria). Ejemplo: CALL PROCEDIMIENTO RET: Regresar de un procedimiento Descripcin: Regresa de un procedimiento al que se entro previamente con un CALL cercano o lejano. Lo que hace esta instruccin que se almaceno al hacer la llamada. Esto permitir continuar la ejecucin del programa en la siguiente instruccin al CALL. Banderas: No las afecta. Formato: RET [VALOR POP] Ejemplo: RET

INSTRUCCIONES DE CONTROL DEL MICROPROCESADOR


Hay varias instrucciones para el control de la CPU, ya sea a ella sola, o en conjuncin con otros procesadores:
NOP: No operacin. Descripcin: El procesador no hace nada. Pasa a ejecutar la instruccin siguiente. Banderas: Ninguna.

Ejemplo: NOP HLT: Detener CPU Descripcin: El procesador se para. Solo abandona ese estado en uno de estos casos: Se restaura el sistema (activacin de la lnea RESET). Se recibe una interrupcin no enmascarable sobre la lnea NML. Se recibe una interrupcin enmascarable sobre la lnea INTR (si las interrupciones estn permitidas).

Banderas: Ninguna. Ejemplo: HLT WAIT: Espera. Descripcin: Esta instruccin, junto con ESC, permiten la comunicacin con otros coprocesadores. WAIT sirve para poner al procesador en estado de espera, estado que abandona cuando se activa la lunea TEST. La lnea TEST la activa el coprocesador cuando esta libre o preparado para ejecucin. WAIT chequea la lnea TEST a intervalos fijos (cinco intervalos de reloj). Banderas: Ninguno. Ejemplo: WAIT LOCK: Bloquear el bus. Descripcin: LOCK es un prefijo de un byte que acompaa a una instruccin y que activa la seal LOCK mientras dicha instruccin se ejecuta; es decir, impide la utilizacin del bus por otros procesadores, impidiendo de esta forma el acceso a los recursos compartidos por estos. En este tipo para el control del acceso a estos recursos. Banderas: Ninguna. Ejemplo: LOCK ESC: Escapar. Descripcin: Esta instruccin suministra un mecanismo de comunicacin con otros coprocesadores. Se usa para indicar a un coprocesador que comienza a realizar alguna tarea. A su vez, el 8086/8088 contina ejecutando la instruccin siguiente. Se usa en combinacin con WAIT. Banderas: No afecta ninguna. Ejemplo: ESC inmed, src

MODOS DE DIRECCIONAMIENTOS
Todos los registros internos del 8086/88 son de 16 bits. El bus de direccin es de 20 bits, por lo que se usa ms de un registro interno para generar la direccin de 20 bits. Los dos (2) registros usados para la direccin de la instruccin son el IP y el CS. Se combinan en una forma especial para generar la direccin de 20 bits. Direccin de 20 bits = 1610 * CS + IP Por ejemplo: Si los registros CS e IP contienen los valores: CS = 1000H; IP = 0414H La direccin de 20 bits es: 1610 * 1000H + 0414H = 10000H + 0414H = 10414H Esta es la direccin en memoria desde la cual la nueva instruccin debe buscarse. Al registro IP se le refiere como offset, el registro CS * 1610 apunta a la direccin de inicio o segmento en memoria desde el cual se calcula el offset. Cada direccin generada por el 8086/88 usa uno de los 4 registros de segmento. Este registro de segmento es recorrido 4 bits hacia la izquierda antes de ser sumado al offset. La instruccin del CPU especfica cuales registros internos se usan para generar el offset. Tomando en cuenta la instruccin MOV, veremos los diferentes direccionamientos: Direccionamiento Inmediato El operando fuente aparece en la instruccin. Un ejemplo, es el que mueve un valor constante a un registro interno. Ejemplo: MOV AX, 568D Direccionamiento a Registro Indica que el operando a ser usado est contenido en uno de los registros internos de propsito general del CPU. En el caso de los registros AX, BX, CX o DX los registros pueden ser de 8 a 16 bits. Ejemplo: MOV AX, BX MOV AL, BL ; AX <- BX ; AL <- BL

Direccionamiento Directo Especifica en la instruccin la localidad de memoria que contiene al operando. En este tipo, se forma una direccin de 20 bits. Ejemplo: MOV AX, COUNT El valor de COUNT es una constante. Es usada como el valor offset en el clculo de la direccin de 20 bits. Direccionamiento de Registro Indirecto Con el modo de direccionamiento de registro ndice, la direccin offset de 16 bits esta contenida en un registro base o registro ndice. Esto es, la direccin reside en el registro BX, BP, SI o DI. Ejemplo: MOV AX, [SI] Direccionamiento de Registro Indirecto con Desplazamiento Este tipo de direccionamiento incluye a los dos modos de direccionamiento anteriores. La direccin offset de 16 bits se calcula sumando el valor de 16 bits especificado en un registro interno y una constante. Por ejemplo, si usamos el registro interno DI y el valor constante (desplazamiento), donde COUNT ha sido previamente definido, el nemotcnico para esta construccin es: MOV AX, COUNT [DI] Direccionamiento de Registro Indirecto con un Registro Base y un Registro ndice Este modo de direccionamiento usa la suma de dos registros internos para obtener la direccin offset de 16 bits a usarse en el clculo de la direccin de 20 bits. Ejemplo: MOV [BP] [DI], AX MOV AX, [BX] [SI] ; el offset es BP + DI ; el offset es BX + SI

Direccionamiento de Registro ndice Indirecto con un Registro Base, un Registro ndice y un Registro Constante Este es el modo de direccionamiento ms complejo. Es idntico al modo de direccionamiento anterior, excepto que se suma una constante. Ejemplo: Si se tiene los siguientes valores en los registros: DI = 0367H, BX = 7890H, COUNT = 0012H

El modo de direccionamiento indica que el offset especificado por la suma de DI + BX + COUNT sea usado para mover el dato en memoria en el registro AX. MOV AX, COUNT [BX] [DI] La direccin offset de 16 bits es 7C09H.

SISTEMA NUMRICO EN ENSAMBLADOR


Constantes Numricas Las constantes numricas se usan para definir valores aritmticos y direcciones de memoria. Las constantes numricas no llevan comillas, como sucede con las cadenas de caracteres, y van seguidas de un indicador de la base utilizada. Si se omite este, se supone el sistema es decimal. Constante Decimal Hexadecimal Binario Formato 09 0F 0/1 Ejemplo 123D 0F0AH 11101000B

Nota: El primer digito de una constante hexadecimal es una letra, debe anteponerse un cero, para que ensamblador pueda distinguir que se trata de una constante numrica y no una cadena de caracteres. Directiva EQU No define ningn tipo de dato, sino que define constante, o sea, define valores que el ensamblador puede sustituir en otras instrucciones. Por ejemplo: VALOR EQU 100 Cada vez que en el programa aparezca VALOR, el ensamblador lo sustituir por 100. As: MOV AX, VALOR Operador PTR La directiva PTR indica que el dato a continuacin es un puntero. Solo se utiliza en casos en los que hay una ambigedad en el tamao de los datos que una instruccin debe manejar. Normalmente, con el tipo de las etiquetas se puede saber de que longitud es una determinada variable. Sin embargo, hay veces en las que no es posible. Por ejemplo, consideremos que guardamos la direccin de un arreglo en el rea de datos. Nos interesa conocer por separado las dos partes de la direccin: el desplazamiento y el segmento. Para ello, podemos utilizar dos variables: .DATA OFS DW ? SEG DW ?

BIBLIOGRAFA
Curso Ensamblador 8086 Castellano. Facultad de Informtica. Universidad de Murcia. Internet. Microcomputadoras al detalle. Luis Urieta Prez y Pablo Fuentes Ramos. Internet. Repertorio de instrucciones del 8086/8088. Germn Galeano Gil. Juan A. Gmez Puildo. http://atc.unex.es/gacdl

Vous aimerez peut-être aussi