Está en la página 1de 91

LENGUAJE ENSAMBLADOR

ES NECESARIO EL CONOCIMIENTO DEL LENGUAJE ENSAMBLADOR? Cuando una persona se inicia en el estudio y aprendizaje de un lenguaje es con la intencin de programar con el mismo, hasta obtener un buen dominio en su manejo. PARA QUIENES PUEDE SER UTIL EL LENGUAJE ENSAMBLADOR? Los humanos nos podemos comunicar con computadoras de la misma manera que con otros humanos a travs de un lenguaje establecido. Si ambos participantes emplean el mismo lenguaje la comunicacin es directa, sin embargo si no se emplea el mismo lenguaje se requiere una tercera persona que realice la traduccin (interprete o traductor). Siendo un instrumento electrnico, una computadora puede entender solamente seales elctricas las cuales son el lenguaje nativo de las mismas, de tal manera que si deseamos establecer una comunicacin con la computadora debemos aprender este lenguaje electrnico. Este fue el enfoque que usaron los primeros programadores, ya que se vieron obligados a escribir sus programas con una secuencia de cdigos numricos, los cuales correspondan a seales elctricas dentro de la computadora, a esta forma de programar directamente la maquina se le llamo programacin en lenguaje maquina. Los lenguajes de maquina producen potencialmente los programas ms eficientes, ya que permiten el control directo del cerebro (procesador) del a computadora, con una mnima traslacin de cdigo a seal elctrica. Sin embargo el precio a pagar por esta conveniencia es aprender las instrucciones en forma numrica, como un grupo de dgitos binarios o hexadecimales. Por ejemplo para indicarle a la computadora que realice una suma se tiene que introducir el siguiente patrn binario 0010 1101 o su equivalente en hexadecimal 2D, como se puede observar es muy fcil cometer errores en esta manera de programar. Al pasar el tiempo cuando las computadoras fueron usadas para resolver problemas complejos (en consecuencia programas ms grandes), alguien concibi la idea la idea de reemplazar cada cdigo numrico, con una abreviatura conocida del ingls (idioma del pas donde se avanzaba en esta ciencia) que fuera fcilmente recordada. Por ejemplo era ms fcil recordar una instruccin de suma como ADD que su equivalente patrn en binario (0010 1101) o hexadecimal (2D) y as con las dems instrucciones. Por supuesto, esto requiri un programa adicional para convertir estas abreviaturas a su equivalente cdigo numrico a este programa se le llam ensamblador y a la manera de programar usando estas abreviaturas se le conoci como programacin en lenguaje ensamblador, a estas abreviaturas se le conocen como mnemnicos o mnemotcnicos. El nivel de programacin siguiente al ensamblador lo forman los lenguajes que hacen al lenguaje maquina totalmente transparente al programador mediante el reemplazo de un grupo de mnemnicos por una palabra o frase totalmente comprensible. Estos lenguajes conocidos como lenguajes de alto nivel nos permiten una programacin rpida y fcil, sin embargo el programa resultante ocupa ms espacio en memoria y se ejecuta ms lentamente que su equivalente en ensamblador. En la eleccin del lenguaje para programar se deben tomar en cuenta varias consideraciones, pero

si lo que busca es rapidez en la ejecucin o la fijacin del programa en un pequeo espacio de memoria entonces la alternativa es programar en lenguaje ensamblador. Para entender completamente la programacin del lenguaje ensamblador se deben conocer las caractersticas de los procesadores, ya que la programacin en lenguaje ensamblador se relaciona de forma directa con el hardware del equipo.

CAPITULO 1. CARACTERISTICAS DEL PROCESADOR El lenguaje ensamblador objeto de estudio es del microprocesador 8086/8088 de Intel, por lo tanto en este captulo vamos a analizarlas caractersticas de este microprocesador. 1.1 Genealoga del 8088 Se puede considerar al 8088 como un procesador de 8 o 16 bits dependiendo del punto de vista particular, puede ser caracterizado por un procesador de 8 bits por que transmite informacin sobre un bus de datos externo de 8 bits, sin embargo los buses internos son de 16 bits, esto es puede operar con datos de 8 o 16 bits de igual manera. Por qu Intel desarrollo un microprocesador con un bus de datos externo de 8 bits y arquitectura interna de 16 bits? La explicacin siguiente contestara la pregunta. En noviembre de 1971 Intel introdujo al mercado el primer microprocesador el 4004 de 44bits el cual tuvo poca aplicacin, en Enero de 1972 surge el primer microprocesador de 8 bits el 8008 con una arquitectura similar a la de una calculadora, venia dotada con instrucciones para manejar dispositivos perifricos. En 1973 surge el 8080 con caractersticas mejoradas de su antecesor (8008), ms instrucciones, mayor velocidad de procesamiento, ms capacidad de manejar vectores de interrupcin y suministro de voltaje de alimentacin (los anteriores tenan dos). Cuando surgi este procesador, otras compaas lanzaron al mercado sus propios diseos de procesadores de 8 bits: Zilog introduce el Z-80 Mos Technology (actualmente Commodore) el 6502 En 1978 Intel introduce el 8086 el cual es un procesador con un bus de datos externo de 16 bits, tiene una velocidad de procesamiento de 10 veces mayor que el 8080, empleando el mismo grupo de instrucciones, sin embargo la existencia en el mercado de una gran cantidad de dispositivos de 8 bits, obligo a la empresa a construir un microprocesador con las mismas caractersticas del 8086 pero , un bus en la literatura de Intel se hace referencia a estos procesadores como iAPX88, iAPX86.

1.2 ARQUITECTURA DEL 8088 El 8088 tiene un total de 14 registros los cuales se dividen de la siguiente manera: 4 Registros para el manejo de datos e informacin. 4 registros usados como apuntadores. 4 registros para determinar los segmentos del programa. 1 registro apuntador de instrucciones. 1 registro de banderas. La figura 1.1 muestra esta configuracin, el uso de cada registro se explicar a continuacin.

7
REGISTROS DE DATOS

07

0 ACUMULADOR BASE CONTADOR DATOS

RESGISTROS APUNTADORES INDICES

APUNTADOR DE PILA APUNTADOR DE BASE INDICE FUENTE INDICE DESTINO

REGISTROS DE SEGMENTO

SEGMENTO DE CODIGO SEGMENTO DE DATOS SEGMENTO DE PILA SEGMENTO DE STACK APUNTADOR DE INSTRUCCION

REGISTROS DE BANDERAS

Figura1.1 Registros Internos del 8088

REGISTROS DE DATOS Los programas pueden tratar a los registros de datos como 4 registros de 16 bits (AX, BX, CX, DX) o bien como registros de 8 bits (AH-AL, BH-BL, CH-CL, DH-DL) dependiendo si las operaciones a realizar son de 8 o 16 bits, estos registros son de propsito general , pero algunas instrucciones los manejan con una funcin especfica por ejemplo: AX El acumulador es usado en operaciones aritmticas de multiplicacin, divisin, operaciones de entrada y salida, y en algunas instrucciones en el manejo de cadenas de caracteres. BX Registros Base, usado para direccionar datos en memoria. CX Registro contador, empleado en operaciones repetitivas y de cadenas de caracteres. DX Registro de datos, se usa en operaciones de multiplicacin y divisin con datos de 16 bits y en algunas instrucciones de entrada-salida.

REGISTROS DE SEGMENTO El 8086/8088 puede mantener los datos y el cdigo de un programa en reas separadas, a cada rea se le llama segmento, la longitud mxima que puede tener depende directamente del registro, por tanto como cada registro es de 16 bits, el rea de memoria que puede abarcar es de 64kb. El 8086/8088 puede trabajar en forma simultnea hasta con 4 registros, por tanto estructurarse un programa de 256kb de tamao. La funcin de estos registros es la siguiente: CS Segmento de cdigo contiene los cdigos de instruccin del programa que est siendo ejecutado. SS Segmento de Stack apunta a la direccin del rea de pila, la cual es una estructura de memoria que funciona como un depsito temporal de direcciones y datos. DS Segmento de datos, este registro apunta a la localidad de memoria donde se almacenan las variables del programa. ES Segmento extra, registro que apunta a un segmento extra el cual es usado en operaciones de cadena.

REGISTRO DE INSTRUCCIN (IR) El registro de instruccin (IP), contiene el offset de la prxima instruccin que se va a ejecutar en la unidad de Ejecucin (EU) del 8088. Este registro es de propsito especial, es decir no se puede programar por el usuario para otras finalidades.

REGISTROS INDICE Y APUNTADORES De la misma forma que se obtiene el cdigo de la prxima instruccin a ejecutarse combinando , el CS con el apuntador de instruccin (IP), el procesador obtiene datos del STACK agregando al SS un desplazamiento que est en un registro apuntador el cual puede ser el apuntador de STACK (SP), o el apuntador de base (BP). Para accesar datos del segmento de datos combina el registro segmento de datos como direccin base y al SI o DI como desplazamiento, estas asignaciones pueden cambiarse.

REGISTRO DE BANDERAS Este registro es el que nos permite tomar decisiones dentro de un programa dependiendo del resultado de una operacin aritmtica o lgica. El registro de banderas es de 16 bits de los cuales solamente 9 son usados y tienen las funciones que siguen: BIT 0 Bandera de acarreo (CF), se activa (=1) si una operacin de suma produce un acarreo, o bien cuando en una resta se produce un prstamo. BIT 2 Bandera de Paridad (PF), se pone 1 si el resultado de una operacin produce un resultado par de bits 1, se emplea en comunicacin de datos. BIT 4 Bandera de acarreo Auxiliar (AF), es similar a la bandera de acarreo solamente que se pone en alto si existe un acarreo del bit 3 al 4 , se emplea en operaciones con nmeros decimales BIT 6 Bandera Zero (ZF), se activa si el resultado de una operacin es 0. BIT 7 Bandera de Signo(SF), tiene significado solamente en operaciones con signo , y se activa cuando el resultado de una operacin produce un resultado negativo (bit ms significativo =1) en operaciones de bytes o palabras (2 bytes) BIT 8 Bandera de Trap (TF), se activa cuando se est trabajando con Debug en la opcin rastreo de un programa. BIT 10 Bandera de Direccin (DF), causa que el 8088 en forma automtica decremente (DF=1), o incremente (DF=0) a los registros de ndice (SI, DI) , en instrucciones de cadena. BIT 11 Bandera de sobreflujo (OF), nos indica la presencia de un error en operaciones con nmeros signados como sigue: OF es 1 si la suma de 2 nmeros del mismo signo, o la resta de dos nmeros de signo opuesto, rebasa la capacidad de complemento a dos de los operandos. OF es 1 si el cociente de una operacin de divisin produce un sobre flujo en el registro del resultado (se dividi entre un numero demasiado pequeo)

1.3 CARACTERISTICAS ADICIONALES DIRECCIONAMIENTO Ya que todos los registros son de 16 bits se podra pensar que el 8088 direcciona solamente 64 kb de memoria (espacio de direccin de los procesadores de 8 bits), sin embargo este procesador emplea una tcnica donde genera una direccin de 20 bits , agregando un desplazamiento (offset) de 16 bits al registro de segmento multiplicado por 16 bits al registro de segmento multiplicado por 16 esto es: Direccin fsica = Reg-seg x 16 + desplazamiento. Realmente el 8088 no multiplica por 16, si no que le agrega cuatro ceros al registro de segmento (fig 1.2. El resultado es el mismo ya que se desplaza el valor del segmento a la izquierda cada vez que se le agrega un cero , esto equivale a multiplicar por 2 de tal manera que desplazando cuatro veces equivale a 2x2x2x2=16.

15

0 Desplazamiento

15

_________________________ + _______________

SUMADOR

19

0 DIRECCION

Fig 1.2 Como se genera una direccin de 20 bits.

Por ejemplo si el registro de segmento tiene una direccin de 2000H y el desplazamiento es de 10 H, la direccin fsica (efectiva), se calcula como sigue: Direccin Fsica= 2000*10+10=20010H De esta manera la localidad referenciada es de 20010H, con esto el 8088 tiene una capacidad de direccionamiento de 1 Mbyte (16 veces el rango de direccionamiento del 8080)

CARACTERISTICAS DEL SOFTWARE Especficamente el 8088 puede realizar operaciones aritmticas con datos de 8 o 16 bits , sobre nmeros decimales almacenados en forma empaquetada (2 digitados por byte) o desempaquetada (1digito por byte). As mismo puede manejar cadenas de caracteres (textos) de bytes o palabras con una longitud hasta de 64 Kbytes. El 8088 tiene 92 tipos de instrucciones bsicas, siete modos diferentes de accesar la informacin (direccionamiento), con esto se tiene la posibilidad de realizar combinaciones y asi, tener miles de instrucciones

que este procesador puede realizar. El reloj inicial de estos procesadores lo formaba un cristal que operaba a 4,770,000 ciclos por segundo, esto significa que cada ciclo de reloj emplea aproximadamente 210 nanosegundos , la instruccin ms rpida (mover un dato entre registro) se tarda 2 ciclos (420 nanosegundos), y la instruccin ms lenta (divisin asignada de 16 bits) 206 ciclos de reloj aproximadamente 43 microsegundos de ejecucin, como se puede observar la operacin ms lenta a esta velocidad del procesador tarda 0.000043 segundos.

ESPACIO ENTRADA SALIDA El 8088 tiene capacidad para direccionar 64 k puertos de Entrada/Salida, los primeros 256 puertos son directamente direccionables con instrucciones de entrada y salida, los puertos restantes se direccionan colocando el nmero del puerto en un registro de datos, al igual que las localidades de memoria los puertos pueden ser de 8 o 16 bits de capacidad. *Puerto es un dispositivo normalmente programable que sirve interfaz entre el procesador y dispositivos perifricos, los puertos pueden establecer la comunicacin en forma serial y/o paralela, la informacin acerca de la programacin, la informacin acerca de la programacin de los puertos se puede consultar en los manuales de referencia tcnica.*

DISTRIBUCION DE LA MEMORIA Mas de 1Mbyte de espacio direccionable de memoria est disponible para programas del usuario, pero el 8088 usa algunas de las direcciones ms altas y ms bajas para propsitos especiales (fig 1.3). Los 16 bytes ms altos de la memoria mantienen una o ms instrucciones de reset del sistema, las que son ejecutadas cada vez que se enciende la computadora.

Dec. 000 255 256k 624k 640k 656k 704K 736K 800K 800K 812K 944K 976K 1008K

DIRECCIN Hexa 0000 40000 40000 90000 A0000 A4000 B0000 B4000 B8000 C8000 CC000 EC000 F4000 FC000

FUNCIN 256 kb de ram instalados en la placa del sistema. 384 kb opcionales instalados en placas de e/s rea reservada rea reservada Memoria intermedia de visualizacin monocroma Reservado Memoria intermedia visualizacin de color Espacio del disco duro Zona de expansin memoria de 192 kb 16 kb de rom del sistema de

COMENTARIOS Normalmente se suministran con sist. Espacio que puede utilizarse sin software especial

Este espacio puede emplearse para las placas De despliegue de la pc y placas de otros fabricantes.

de Requiere el empleo de software especial. Los ltimos 16 k se suministran con el sistema

Figura 1.3 distribucin de memoria de la pc.

INTERRUPCIONES.

De la misma forma que las personas estamos sujetas diariamente a interrupciones por las personas que nos rodean para solicitar nuestra atencin. El 8088 puede reconocer 256 tipos de interrupciones, cas una se reconoce con un nico cdigo de identificacin (un numero entre 0 y 255) que se utiliza para apuntar al vector de interrupciones, el cual es una localidad de memoria que mantiene la direccin de la rutina que maneja dicha interrupcin. De los 256 tipos de interrupciones, 5 son internas del procesador y son las siguientes: TIPO 0 Error de divisin, ocurre cuando una operacin produce un resultado grande que no entre en el registro de destino. TIPO 1 Paso a paso, ocurre cuando en procesos de depuracin de un programa este se ejecuta paso a paso. TIPO 2 Interrupcin no mascarable, es un tipo de interrupcin que no puede ser bloqueada, se produce cuando un evento catastrfico ocurre (perdida de energa). TIPO 3 Breakpoint , ocurre cuando se colocan puntos de ruptura en un programa. TIPO 4 Sobreflujo, se produce cuando en operaciones aritmticas con signo el resultado sobrepasa al mximo nmero positivo o a l mnimo negativo. Adems de los tipos de interrupciones mencionados el 8088 proporciona 251 tipos ms, las cuales pueden ser internas o externas algunas de las cuales son usadas por el BIOS y el DOS, al encender la computadora el valor de las nuevas banderas es cero.

UNIDAD II

PSEUDO-OPERACIONES EN ESAMBLADOR Como se mencion con anterioridad el programa escrito en mnemnicos se le conoce como programa fuente, el trabajo del ensamblador es convertir en este programa fuente que podemos comprender en cdigo objeto que la maquina puede entender. Hay varios ensambladores disponibles para los usuarios de computadoras personales: -ASM. El cual se ejecuta en PCs que tienen menos de 64 kb de memoria. -MASM. (Macro Ensambler) que se ejecuta en PCs con al menos 96kb de memoria, en el MASM se pueden definir algunas operaciones que no es posible realizar con el pequeo ensamblador (ASM).

PASOS AL DESARROLLAR UN PROGRAMA 1.- Definir lo que se pretende que la computadora haga, esto requiere de un plan o diagrama de flujo del programa. 2.- Basndose en el diagrama de flujo codificarlo en base a las instrucciones del lenguaje ensamblador. 3.- Introducirlo en la computadora usando un programa editor. 4.- Convertir el programa fuente en cdigo ejecutable, para esto se debe de usar el programa MASM. 5.- El programa con extensin .OBJ se debe pasar a ejecutable. 6.- Ejecutar el programa. 7.- Verificar los resultados del programa, se difieren de lo esperado depurar el programa con el DEBUG.

El sistema operativo DOS tiene la habilidad de almacenar el programa ejecutable (.EXE), en cualquier lugar disponible de la memoria, para esto se debe convertir el programa ejecutable en un modulo relocalizable o reentrante. El programa LINK, que forma parte de los comandos del sistema operativo tiene esta finalidad. Las constantes en el programa fuente que se proporcionan pueden ser aceptadas de las siguientes formas: Binario. Una secuencia de 1s y 0s seguidos por la letra B. Decimal. Son introducidos como una secuencia de dgitos reconocidos por el patrn decimal (0-9), seguidos por la letra D.

Hexadecimal. Secuencia de 0-9 y A-F, seguidos por la letra h, ejemplo: 0A23H. Octal. Secuencia de dgitos del 0 al 7 seguidos por la letra Q u D. ejemplo: 1470,147Q. Carcter. Son una cadena de letras, nmeros o smbolos, encerrados entre comillas (), ejemplo: hola como te llamas?, 0987,123,876. Cada lnea de instruccin en lenguaje ensamblador puede tener como mximo los siguientes campos: [ETIQUETA:]MNEMONICO[OPERANDO], OPERANDO2, ETC][;COMENTARIO] Como puede observarse de los cuatro campos solamente el campo NMONICO es obligado, los dems pueden ser opcionales. Cada campo puede estar separado del otro por al menos un espacio. Ejemplo: GET_COUNT: MOV CX,DI; CONSIGUE LADIRECCION DEL DATO. El campo de la etiqueta asigna un nombre simblico a una localidad de inicio en una institucin, esto permite a otras instrucciones dentro del programa referirse a esta localidad por su nombre y no por su direccin (localidad de memoria en nmeros) , una etiqueta debe tener como mximo 31 caracteres, el primer carcter debe ser una letra y debe terminar con dos puntos ( : ). No se deben emplear como etiquetas nombres de registros o cdigos de instrucciones. NEAR & FAR LABELS . El 8088 tiene instrucciones que realizan un salto de la localidad GET_count, este salto se puede realizar de dos maneras. JMP GET_COUNT. Hace que el 8088 transfiera el control a la instruccin almacenada a partir de la localidad GET_count , este salto se puede realizar de dos maneras: 1.- Si la etiqueta esta en el mismo segmento de cdigo que el de la instruccin que ordena el salto, el 8088 solamente carga el desplazamiento de la etiqueta en el registro IP , permaneciendo CS con su valor, este salto es NEAR. 2.- Si la etiqueta a donde se va a saltar esta en otro segmento diferente al de la instruccin que ordena el salto, el 8088 debe cargar el desplazamiento (OFFSET) de la etiqueta en IP y el valor del segmento CS. Orden de salto en el mismo segmento: GET_COUNT : MOV CX,DI Orden de salto si GET_COUNT esta en otro segmento: GET_COUNT LABEL FAR MOV CX,DI

EL CAMPO MNEMONICO El campo del mnemnico es en donde se especifica el carcter o caracteres que representan el cdigo de la instruccin que se va a ejecutar por el procesador , mnemnico dice el ensamblador cuantos operandos y de qu tipo sern obtenidos. El campo del operando indica al procesador donde localizar los datos con los cuales se va a operar por ejemplo: MOV CX,DX El campo del operando CX,DX indica al 8088 que copie el contenido del registro DX en CX , el campo del operando es obligatorio en algunas instrucciones y puede no estar presente en otras . Cuando est presente el campo del operando se deber separar del mnemnico por al menos un espacio en blanco, los operandos entre si se deben separar por comas (,). En operaciones con dos operandos el de la izquierda es el operando destino, mientras que el de la derecha es el operando fuente , el operando fuente no vara su contenido. El campo del comentario es opcional, se usa para hacer indicaciones de lo que esta realizando el programa fuente haciendo con esto mas claro el programa, el campo del comentario se debe proceder por punto y coma(;) por ejemplo: MOV CX,0 ;Limpia el contador de datos

PSEUDO OPERADORES Los pseudo operadores dan direcciones al ensamblador (ms que al microprocesador), las pseudo operaciones pueden definir smbolos, apartar memoria para almacenamiento temporal, etc. Pero a diferencia de las instrucciones de las pseudo operaciones no generan cdigo objeto. El Macro Assembler proporciona 59 diferentes Pseudo operaciones, las cuales se divididen en tres grupos principales: DATOS ASSUME COMMENT INCLUDE DB DW DD ENDS EQV = PROC SEGMENT END ENDP EXTRN

MACRO ENDM REPT IRP IRPC LOCAL MACRO PURGE

LISTADO PAGE SUBTTL TITLE

Las pseudo operaciones de datos son divididas a su vez en 5 grupos funcionales para su estudio los cuales son:

Pseudo operaciones de definicin de smbolos. Las pseudo operaciones que definen smbolos permiten asignar un nombre simblico a una expresin, esta puede ser una constante de 16 bits, una referencia indexada, otro nombre simblico , un segmento prefijo y operando o nombre de instruccin . Una vez asignado el nombre se puede usar en cualquier parte del programa donde se use la expresin. Dentro de este grupo de pseudo operadores estn EQU el cual define una expresin en forma permanente y el smbolo de igualdad (=) el cual define a una expresin que puede redefinirse en cualquier parte del programa, ejemplo: K EQU 1024 B EQU [BP+1] P8 EQU DS:[BP + 8] ; Un valor constante y permanente ; Referencia indexada ;Segmento prefijo y operando

CONST = 56 CONST= 57 CONST= CONST+]

; Esto es lo mismo que EQU 56, pero ahora ; El valor de const puede ser redefinido ; En cualquier parte del programa

Pseudo operaciones de definicin de datos. La mayora de los programas usan localidades de memoria para contener datos , el ensamblador cuenta con res pseudo operadores para apartar espacio en memoria: 1.- DB (Define Byte). Aparta bytes en memoria 2.- DW(Define Word). Aparta 2 bytes en memoria

3.- DD(Define Double Word). Aparta 4 bytes en memoria

Los formatos generales para estas pseudo operaciones don los siguientes: [name] DB expresin [, . . .] [name] DW expresin [, . . .] [name] DD expresin [, . . .] Donde expresin puede ser una variable, colocar tablas (bloques de localidades de memoria referenciadas bajo un nombre), valores numricos o de cadena , por ejemplo: BU_MAX DB 255 BS_MAX DB 127 BS_MAX DB -128 ; Mximo valor constante con signo. ; Mximo valor de 1 byte signado. ; Mnimo valor de 1 byte signado.

Se puede as mismo definir el clculo de un valor constante en memoria, o de tablas: MIN_POR_DIA DW 60*24 B_TABLA DW 0,0,0,507,90,-24,63,63,63 El lmite para definir datos es el ancho de una lnea (132 columnas). En el ejemplo anterior hay caracteres repetitivos, existe una operacin llamada DUP, la cual permite la definicin de los caracteres que se repiten de la siguiente manera: B_TABLA DW 3 DUP (0), 507,90,-24,3 DUP (63) As mismo es posible definir una variable sin asignarle un valor previo, empleando un signo de interrogacin, ejemplo: HIGH_TEMP DB ? AVG_WEIGHT DB ? La declaracin anterior reserva un total de 2 bytes en memoria , sin embargo estas localidades no estn inicializadas no se debe considerar que tienen cero almacenado en este espacio de memoria. BUFFER DW 7,12,98 DUP (?) ; Se aparta 200 bytes de memoria La pseudo operacin DB tambin acepta una cadena de caracteres como expresin , esto permite almacenar mensajes de error, encabezados de tablas, las cadenas de caracteres deben estar encerrados entre comillas (): MENSAJE DB Antes de encender la computadora verifique que se DB encuentre conectada a la fuente de C_A

Pseudo operaciones de referencia externa. Las pseudo operaciones de referencia externa permiten hacer uso de informacin que est definida en otros archivos y por tanto en cualquier parte del sistema , las pseudo operaciones que entran dentro de este grupo son: PUBLIC. Esta pseudo operacin hace que los smbolos declarados de esta manera estn disponibles para otros programas que estn encadenados junto al mdulo actual. Un nombre definido de esta manera puede ser nombre de variable, pero no un nombre definido por EQU o =. EXTRN. La declaracin de esta pseudo operacin identifica smbolos que son declarados como PUBLIC en otros mdulos, el formato es como sigue: EXTRN NAME; TYPE [, . . .] Donde name es el smbolo definido en el otro modulo de lenguaje ensamblador y type puede ser BYTE ,WORD,DD,NEAR, FAR, ABS o un nombre definido por EQU. Por ejemplo supongamos que deseamos accesar a la localidad de memoria TOTAL desde dos mdulos distintos. El modulo en el cual esta variable se encuentra , se puede definir como se indica a continuacin : PUBLIC TOTAL TOTAL DW 25 Y el modulo desde el cual es referenciado puede ser: EXTRN TOTAL: WORD

Pseudo operaciones de SEGMENT/PROCEDURE. Las pseudo operaciones SEGMENT y ENDS parten al programa en segmentos los cuales pueden ser de 4 tipos (CODE, STACK, DATA, EXTRA), en el segmento de cdigo se almacena el programa, en el de DATOS, los datos y variables con los que se va a trabajar, en el de STACK se almacenan datos y direcciones que pueden ser utilizados de manera temporal. Un segmento de datos puede tener la siguiente forma : DATOS SEGMENT A B CUADRADOS DATOS ENDS DB ? DB ? DB 1,4,9,16,25,36

Las palabras SEGMENT y ENDS marcan los limites de un segmento de programa, ellos no especifican que tipo de segmento esta siendo definido. Una pseudo operacin separada (ASSUME) es la que le indica al procesador a cual de los 4 registros pertenece un segmento dado , generalmente esta pseudo operaciones coloca posteriormente del nombre del segmento de cdigo , ejemplo:

CODIGO SEGMENT ASSUME CS: CODIGO, DS:DATOS MOV AX, DATOS MOV DS,AX . . . . MOV AX, BX . . . . CODIGO ENDS

Note que explcitamente hacemos cargado la direccin del segmento de datos (DATOS), la pseudo operacin ASSUME no se encarga de esto.

PROC/ENDP. Las pseudo operaciones PROC y ENDP marcan el inicio y final de un procedimiento. Un procedimiento esta formado por un conjunto de instrucciones las cuales estn agrupadas bajo un nombre y son llamadas con CALL seguido del nombre del procedimiento, al hacerlo se desemsamblan los cdigos de instruccin del procedimiento con lo que se evita tener que teclearlos nuevamente, un procedimientopuede ser definido del tipo PUBLIC , NEAR, FAR, y al terminar se debe emplear la pseudo operacin RET para que retorne al programa de donde fue llamado por ejemplo: CERCANO PROC NEAR MOV AX, CX

RET CERCANO ENDP

Puede ser definido de la siguiente manera: PUBLIC LEJANO LEJANO PROC FAR MOV CX,12 . . . . RET LEJANO ENDP

Cuando el 8088 llama a un procedimiento coloca en el rea del STACK la direccin de la instruccin actual, ejecuta el procedimiento recupera el valor de la direccin al encontrar la pseudo operacin RET.

Pseudo operaciones para control de ensamble. El 8088 proporciona varias pseudo operaciones para control de ensamble, pero solo una instruccin (END) es frecuentemente usada. Esta pseudo operacin marca el final de cualquier programa fuente , debe ser incluida en cualquier programa.

MACROS Una macro es una secuencia de declaraciones en ensamblador (instrucciones y pseudo operaciones), que pueden aparecer varias veces en un programa, con alguna modificacin opcional cada vez que es llamado. Al iguala que los procedimientos las macros son nombres asignados, una vez que se ha definido la macro se una el nombre en vez de repetir la secuencia de instrucciones.

MACROS VS PROCEDIMIENTOS Aunque Macros y Procedimientos proporcionan una manera simplificada de realizar instrucciones no son lo mismo, el cdigo de un procedimiento ocurre una vez en el programa y el procesador transfiere el control a la inicio del procedimiento cada vez que es llamado, en contrate el procesador reemplaza el nombre de la macro por sus cdigos cada vez que es llamada. La desventaja de las macros frente a los procedimientos es que hacen al programa de maquina mas grande, sin embargo los programadores prefieren el uso de macros por las siguientes razones: 1.- Las macros so dinmicas. Se pueden fcilmente pasar parmetros a las macros cada vez que son llamadas, a los procedimientos solo se les puede pasar para metros desde registros o localidades de memoria.

2.-Las macros son rpidas. El procesador no tiene retardos por llamadas y retornos de instrucciones como en los procedimientos. 3.- Las macros pueden crearse y guardarse en un librera. Formato de las macro-instrucciones. Toda macro tiene 3 partes: 1.- Encabezados. El cual contiene el nombre de la macro y opcionalmente una lista de parmetros los cuales pueden ser pasados a la macro cada vez que es llamada. 2.- Cuerpo. Es una secuencia de instrucciones que definen lo que hace la macro. 3.- Terminado. La pseudo operacin ENDM.

SUMA_MEN MACRO MOV ADD AX,AY AX,AY

MOV ZZ,AX ENDM Cuando se llama SUMA_MEM VERDE,AZUL,ROJO equivale a: MOV AX, VERDE ADD AX, AZUL MOV ROJO, AX

OPERADORES Un operador es un modificador en el campo del operando de una declaracin en el modulo ensamble, hay 5 clases de operadores: 1.- Operadores Aritmticos 2.- Operadores Lgicos 3.- Operadores Relacionales 4.- Operadores que retornan valores 5.- Operadores de atributo

OPERADORES ARITMETICOS Los operadores numricos empleados en el ensamblador combinan operandos numricos y producen un resultado numrico, los operadores aritmticos mas frecuentemente usados son: Suma (+) Resta (-) Multiplicacin (*) Divisin (/) Ejemplos: TABLA DW TABLA + 2 MOV CX, [ DI + 5 ] MOV CX, 21/2

OPERADORES LOGICOS Los operadores relacionales comparan dos valores numricos o direcciones de memoria en el mismo segmento y producen un resultado es uno de los siguientes nmeros: 0000 si la relacin es falsa FFFF si la relacin es verdadera. Los operadores relacionales usados son: EQ. Compara los valores de los operandos y produce un resultado verdadero si son iguales. NE. Produce resultado verdadero si los operandos son diferentes. LE. Verdadero si operando_1 es menos o igual que operando_2. LT. Verdadero si operando_1 es menor que operando_2. GE. Verdadero si operando_1 es mayor o igual que operando_2.

De esta forma si COMPARA_1 es una constante predefinida , la decalracion: MOV AX, COMPARA_1 LT 20

Se ensambla como: MOV AX,0FFFFH

Si COMPARA_1 es menor que 20, y como : MOV AX,0000 Si COMPARA_1 es mayor o igual a 20 Debido que los operadores relacionales generan solamente dos resultados posibles, raramente se les usa solos, en vez de eso se combinan con otros operadores para producir decisiones complejas dentro de un programa, por ejemplo suponga que AX se va a almacenar con 5 si Cl es menor que 20, y con 6 si es mayor a 20 la declaracin que realiza esto es lo siguiente: MOV AX, ((C1 LT 20) AND 5) OR (C1 GE 20) AND 6) ) De esta forma si C1 LT 20 se cumple se produce FFFF como resultado y al realizar la operacin lgica AND genera este valor como resultado y se realiza: MOV AX, 5 De otra manera si C1 GE 20 es verdadero produce FFFF como resultado y al realizar la AND con 6 , permanece este valor como resultado y se generara la siguiente lnea: MOV AX,6 5,

OPERADORES QUE RETORNAN VALORES Este grupo contiene operadores pasivos los cuales proporcionan informacin acerca de variables y etiquetas en el programa , de esta forma los operadores SEG y OFFSET retornan los valores del segmento y desplazamiento respectivamente de alguna variable o etiqueta, si TABLA fuera una variable en el segmento de datos: MOV AX , SEG TABLA MOV BX, OFFSET TABLA Cargan los valores del segmento y desplazamiento de TABLA en los registros AX y BX.

El operador TYPE retorna un valor numrico indicando el tipo de variable o etiqueta utilizada en el programa, si el valor es de una variable entonces: TYPE = 1 si es BYTE TYPE = 2 si es WORD Si el dato es una etiqueta :

TYPE = 1 si es NEAR TYPE = 2 si es FAR

Los operadores LENGHT Y SIZE tienen significado solamente con variables definidas por la pseudo operacin DUP. LENGHT. Retorna el numero de bytes o palabras apartados por la variable, ejemplo: TABLA DW 100 DUP (1) MOV CX, LENGHT TABLA Obtiene el numero de palabras de TABLA, CX=200

OPERADORES DE ATRIBUTO Los operadores de atributo permiten especificar un nuevo atributo a un operando e ignorar el atributo actual, el apuntador PTR proporciona la especificacin a un operando del tipo BYTE, WORD o distancia NEAR-FAR, este atributo nos permite referenciar byte en una tabla de palabras por ejemplo: TABLA DW 100 DUP (?) La declaracin : PRIMER_B EQU BYTE PTR TABLA Asigna a PRIMER_B la direccin del primer byte que esta localizado en TABLA . Despues de esto se puede apuntar a cualquier byte de la tabla referenciado al primer byte como sigue: CINCO_B EQU PRIMER _ B + 4

Los operadores de atributo DS: , ES: , SS: , dan la opcin de cambiar los offsets que el 8088 asigna por default; por ejemplo, el 8088 automticamente considera que DS es el registro de segmento, si el operador emplea como operandos SI, DI o DX con offset, por tanto la siguiente instruccin: MOV AX, ES:[SI] Ordena al 8088 emplear ES en lugar de DS. Los operadores HIGH y LOW aceptan una direccin numrica de 16 bits como argumento y retoman un valor de 8bits el cual es la parte alta (HIGH) o la palabra baja (LOW) de este valor.

PROGRAMA EJEMPLO TITLE PROMGRAM EJEMPLO PAGE, 132 STACK SEGEMENT PARA STACK STACK DS 64 DUP (STACK) DATOS SEGMENT PARA DATA FUENTE DB 10,20,30,40 DESTINO DB 4 DUP (?) DATOS ENDS CODIGO SEGMENT PARA CODE PROGRAMA PROC FAR ASSUME CS:CODIGO , DS:DATOS, SS:STACK ;Las siguientes 3 lineas definen un rea de stack para el retorno ;del programa al ambiente del sistema operativo PUSH DS XOR AX,AX PUSH AX ;se coloca la direccion del Nuevo segment de datos MOV AX,DATOS MOV DS, AX MOV DESTINO, 0 MOV DESTINO +1, 0 MOV DESTINO+2,0 MOV DESTINO+3,0 ;inicia la copia de los datos almacenados en la localidad FUENTE

;hacia la tabla DESTINO en orden inverso

MOV AL, FUENTE MOV DESTINO+3, AL MOV AL, FUENTE+1 MOV DESTINO+ 2, AL MOV AL, FUENTE + 2 MOV DESTINO+1, AL MOV AL, FUENTE +3 MOV DESTINO, AL RET PROGRAMA ENDP CODIGO ENDS END PROGRAMA ; declaracin de directivas ; para control de ensamble

Unidad III

INSTRUCCIONES

1.- Transferencia de Datos 2.- Aritmeticas 3.- Manipulacion de Bits 4.- Control de Transferencias 5.- Movimiento de Cadenas 6.- Interrupciones 7.- Control de Procesador

Existen diferentes maneras dentro del ensamblador, de obtener acceso al procesador: a) Directo b) Por Registro c) Inmediato d) Indirecto por Registro e) Base Relativa f) Indexado Directo g) Indexado Relativo

Directo Se presenta cuando se estan accesando entre un registro y una localidad de memoria.

Ejemplo: Tabla DW 57H, 89H, 67H, 100H, 2357H MOV AX, TABLA AX===> 57H

Por Registro Se da solamente entre registros de 8 a 16 bits.

Ejemplo: MOV AX, BX MOV CL, AH

Inmediato.

Ejemplo: MOV AX, 5000 MOV TABLA, 360H

Indirecto por Registro Se usa un registro para direccionar.

Ejemplo: MOV BX, OFFSET TABLA MOV AX, [BX] ; Entre corchetes se considera como apuntador.

Base Relativa Cuando se un registro base mas un apuntador numerico.

Ejemplo: MOV AX, [BX+2]

Indexado Directo Cuando se usa un apuntador indice.

Ejemplo: MOV CX, TABLA[DI]

Transferencia de Datos

Existen 4 maneras de transferir datos:

a) Propsito General b) Entrada / Salida c) Transferencia de Direcciones d) Transferencia de Banderas

Proposito Gral: mnemonico MOV PUSH POP XCHG XLAT sintaxis MOV destino, fuente PUSH fuente POP destino XCHG destino, fuente XLAT tabla-fuente

entrada/salida: mnemonico IN OUT sintaxis IN acum, puerto OUT puerto, acum

Transferencia de Direcciones LEA LDS LES LEA reg16, mem16 LDS reg16, mem32 LES reg16, mem32

Transferencia de Banderas: LAHF SAHF PUSHF PUSHF POPF POPF LAHF SAHF

MOV. Se utiliza par transferir o la transferencia de datos, de un espacio fuente a un espacio destino.

Destino * reg16 * reg8 * localidad de memoria

fuente * localidad de memoria * dato inmediato * reg16 * reg8

- No es permitida la transferencia de una localidad de memoria a otra. - No se permite transferir un dato inmediato a un reg. de segmento. - No se permite asignarle el valor de una variable a un reg. de segmento. - No se permite usar el reg. de segmento de cdigo como destino, solo a travs de otro registro.

PUSH. Mete un dato al area de la pila. Decrementa SP en 2 y el operando es colocado en la parte superior de la pila.

POP. Recupera un dato del area de la pila. Toma la palabra sealada por el puntero SP y la pone en el operando destino e incrementa el puntero de la pila en 2.

XCHG. Intercambia el valor de la fuente, (byte o palabra) con su operando destino, de tipo de dato coincidente y viceversa. XCHG destino, fuente.

Destino * registro * memoria

fuente * registro * memoria

mov AX, 389H mov BX, 24H xchg AX, BX =================> AX = 24H Y BX = 389H

XLAT Realiza una traslacin de bytes de tabla lookup. Usa el registro AL como apuntador base a una tabla tipo byte, direcciona maximo 256 localidades. XLAT traslacin_tabla.

mov BX, Offset tabla mov AL, 15 xlat TABLA

toma a A1 como indice y el valor que encuentra en esa localidad se lo retorna en AL.

IN Sustituye el contenido del registro AL o AX por el contenido de la puerta asignada. El dato transferido puede ser un byte o una palabra de datos. Se utiliza para meter un dato que llega a la computadora de un puerto. Si la puerta se especifica con un byte de datos en la linea es permitido el acceso fijo a las puertas 0 a 255. IN acumulador, puerto.

Puerto equ 38h In AX(16 bits), puerto AH(8 bits)

OUT Saca palabra, byte a puerta inmediata [dx]. Se utiliza para sacar un dato de un puerto o perifericos de e/s. OUT puerto, acumulador.

out puerto, AX

LEA Transfiere desplazamiento de fuente a destino. Carga una direccion efectiva de un desplazamiento de memoria. LEA destino, fuente.

lea BX, tabla lea BX, datos[di]

LDS Almacena el direccionamiento del segmento en una variable inmediata y el desplazamiento del segmento al segmento de datos.

lds DX, numeros

LES Almacena el direccionamiento del segmento en una variable inmediata y el desplazamiento lo almacena en el segmento extra. LES destino, fuente.

les BX, numeros.

LAHF Desplaza los registros de sealizacin SF, ZF, AF, PF y CF en ciertos bits del registro AH. Almacena en AH el estado de algunas banderas: Ah (0, 2, 4, 6, 7).

0= c f

bandera de acarreo

2= p f bandera de paridad

4= a f bandera de acarreo intermedio 6= z f 7= s f bandera de bit de zero. bandera de bit de signo.

SAHF Almacena en AH los sealizadores SF, ZF, XX, AF, XX, PF, XX, CF. Copia el registro AH a los registros bandera.

Programa de Ejemplo PILA SEGMENT DB 20 DUP (PILA) PILA ENDS ASIGNA MACRO L1 VALOR=0 REPT L1 VALOR=VALOR + 1 DB VALOR ENDM DATOS SEGMENT TAB2 ASIGNA 10 DAT1 DD 1200H TABLA DB 1,8,9,16,45,56,69 LOCAL DW 981H DATOS ENDS CODIGOS SEGMENT ASSUME CS: CODIGO, DS:DATOS, SS:PILA PRUEBA PROC FAR PUSH DS

XOR AX, AX PUSH AX MOV DS, AX PUSH LOCAL POP CX MOV DI, 4 MOV AX, TABLA[DI] MOV CX, OFFSET TABLA LEA BX, TABLA MOV CL, [BX] MOV AL, 5 XLAT TABLA LDS DX, DAT1 MOV AX, 573H MOV BX, 4169H XCHG AL, TABLA XCHG BH, AH LAHF MOV AL, AH RET PRUEBA ENDP CODIGO ENDS END

Instrucciones Aritmeticas

SUMA

ADD destino, fuente.

destino = destino + fuente

{suma}

Realiza la suma de dos operandos. El resultado se almacena en el operando destino.

ADC destino, fuente.

destino = destino + fuente + c f {suma con acarreo}

Suma dos operandos con arrastre, si CF esta inicializado a l, entonces se suma un 1 a los 2 operandos, y el resultado se le devuelve al destino.

Destino * registro * localidad de mem

fuente * registro * localidad de mem * dato inmediato

AAA Ajuste ascii para la suma (trabaja en forma desempaquetada). Solamente se ejecutara despus de una instruccin ADD que deja un resultado de un byte en el registro AL. Contiene el contenido de AL en un registro en un digito decimal sin empaquetar, examinas los 4 bits de orden de interior de AL para ver si contienen un numero de BCD valido en el rango de 0 a 9.

Toma el valor mas bajo(menos significativo) de un digito. CF > cuando las banderas estan habilitadas. AF > indica que hay un digito mayor que nueve.

AAD Toma dos digitos BCD no empaquetados, con el digito menos significativo en el registro AL y el digito mas significativo en el registro AH, y los tiene listo para una operacin de division, que devolvera un resultado no empaquetado. Ajuste decimal para la suma (trabaja en forma empaquetada), cuando se utilizan los 8 bits para almacenar dos digitos.

INC. Incrementa en 1 el contenido de un reg. o una localidad de memoria.

Resta.

SUB destino, fuente.

destino = destino fuente. {resta}

Resta el operando fuente del operando destino. El resultado se almacena en el operando destino.

SBB destino, fuente.

destino = destino fuente cf. {resta con acarreo}

Suma el segundo operando al sealizador de arrastre, y ese resultado es restado del primer operando. El resultado se almacena en el primer operando.

DEC destino Decrementa en 1 algun registro o una loc. de mem. Contenido en destino.

NEG destino Resta el operando de cero, la suma 1 y devuelve el resultado del operando formado el complemento a 2. El sealizador de arrastre esta a 1, excepto cuando el operando es cero; {esto hace que CF sea puesto a 0}. Hace negativo un registro o una localidad de memoria.

Of Operandos Sin signo fuente < destino fuente = destino fuente > desti no x x x

sf x x x

zf 0 1 0

cf 0 0 1

operandos con signo

fuente < destino fuente = destino fuente > destino

0/1 0 0/1

0 0 1

0 1 0

x x x

ejemplos:

num1 dw num2 dw num3 db num4 db

1573h, 98h, 760h, 17h ? 9, 8, 120 ?

a) Sumar 1 y 2 almacenar resultado en num2

mov AX, 1573h mov DX, 98h ADD AX, 760h ADC DX, 17h mov num2, AX mov num2+2, DX

b) Restar 760h de 188h y almacenar el resultado en DX

mov AX, 188h SUB AX, 760h mov DX, AX

c) Sumar 9 y 8 de num3 y almacenar el resultado en BCD en num 4

mov BH, num3 + 1 mov AL, num3 ADD AL, BH DAA mov num4, AL

d) Restar 2 de 1

mov AX, 1573h mov CX, 98h SUB AX, 760h SBB CX, 17h

e) Decrementar 9, incrementar 120, negar 8

DEC num3 INC num3+2 NEG num3+1

Multiplicacion MUL Hace la multiplicacion sin signo (AX = AL x Byte especificado) (DX : AX = AX x Palabra especificada)

IMUL Hace la operacin de multiplicacin con signo.

(MUL) (IMUL) Fuente fuente * registro * loc. de mem.

Division DIV

Realiza una division sin signo. Si se especifica un operando fuente de byte, el registro AX es dividido por el operando byte, almacenando el cociente en el registro AL y el resto en el registro AH. Un operando palabra fuente divide a DX : AX por la palabra. Los 16 bits mas significativos del dividendo son almacenados en DX el cociente en AX y el resto en DX.

DIV fuente (Es el dato que se va a dividir) AH 1) BYTE (divisor) BL (cociente)

AH:AL (dividendo) AL (residuo)

2) WORD BX

AX DX:AX DX

IDIV Realiza una operacin de division con signo. Si el operando byte fuente especifica, el registro AX es dividido por el operando byte, almacenando el cociente en el registro AL y resto en el registro AH. Un operando palabra fuente, divide DX:AX por la palabra. Los 16 bits mas significativos del dividendo son almacenados en DX, el cociente en AX, y el resto en DX. El resto tiene el mismo signo que el dividendo y es siempre menor que el dividendo.

IDIV fuente.

Ejemplos:

1).- (325)(10) mov AX, 325 mov BX, 10 MUL BX

2).- (47)(570) mov AX, 47 mov BX, 570 MUL BX

3).- 10000/10

4).- (-62)(43)

mov BX, 10 mov DX, 10000 DIV DX

mov AL, 62 NEG AL mov BL, 43 IMUL BL

Instruccines de manipulacin de bits

1.- Logicos 2.- Rotar 3.- Girar

Logicas AND El resultado contiene 1 en aquellas posiciones donde ambos operandos contenian unos (1); las otras combinaciones de bits dan cero. El OF y CF estan a cero. AND destino, fuente. OR Realiza la operacin OR inclusiva de los dos operandos. Aquellos pares de bits correspondientes que contienen cero son cero en el operando destino. En cualquier otro caso el resultado es uno, el resultado se almacena en el operando destino. OR destino, fuente.

XOR Compara cada bit de los operandos fuente y destino, realiza una OR exclusiva de todos los bits. El resultado contiene cero en aquellas posiciones donde los operandos comparados son ambos uno o cero. XOR devuelve un 1 a las posiciones correspondientes donde los operandos son opuestos. XOR destino, fuente.

NOT Cambia cada bit del operando y devuelve el resultado al operando, no son afectados los sealizadores.

NOT destino.

TEST Realiza la operacin AND logica bit a bit de dos operandos. Cada bit del resultado se pone a uno, cuando los correspondientes bits de ambos operandos son 1; en cualquier otro caso el bits era un cero. El resultado de la instruccin no se utiliza y solamente son modificados los sealizadores apropiados. TEST destino, fuente.

destino * registro * loc. de memoria

fuente * registro * loc. de memoria * dato inmediato

Rotar y Girar SAL Giro aritmetico a la izquierda. SHL Giro logico a la izquierda. SAR Giro aritmetico a la derecha. SHR Es un giro logico a la derecha. Transferencia ROL Rotar a la izquierda. ROR Rotar a la derecha. RCL Rotar a la izq. con acarreo. RCR Rotar a la derecha con acarreo.

a) Transferencia Incondicional b) Transferencia Condicional c) Ciclos Repetitivos

Incondicional

CALL Hace que la direccion de la siguiente instruccin se almacene en la pila, entonces el control del programa se transfiere al operando parametro. Cuando se completa el procedimiento llamado, continua la ejecucin del programa que se llamo de la instruccin que sigue a la instruccin CALL. CALL parametro_operando.

RET. Continua la ejecucin de un programa al transferir el control del mismo a la direccion devuelta que fue devuelta introducida en la pila esta direccion es colocada habitualmente en la pila por una instruccin CALL.

JMP Transfiere el control del programa a una instruccin diferente sin almacenar ninguna informacin devuelta. JMP (objeto).

Condicional Instruccin Descripcin

JA JAE JB JBE JC JCXZ JE JG JGE JL JLE JNA

Salta si CF = 0 y ZF = 0. Salta si esta por encima. Salta si CF = 0. Salta si esta por encima o igual. Salta si CF = 1. Salta si esta por debajo. Salta si CF = 1 o ZF = 1. Salta si esta por debajo o igual. Salta si CF = 1. Salta si hay acarreo. Salta si CX = 0. Salta si el contador del reg. CX = 0. Salta si ZF = 1. Salta si es igual. Salta si ZF = 0 o SF = 0. Salta si es mayor. Salta si SF = OF. Salta si es mayor o igual. Salta si SF <> OF. Salta si es menor. Salta si ZF = 1 o SF <> OF. Salta si es menor o igual. Salta si CF = 1 o ZF = 1. Salta si es menor o igual.

JNAE JNB JNBE JNC JNE JNG JNGE JNL JNLE

Salta si CF = 1. Salta si no esta por encima o igual. Salta si CF = 0. Salta si no esta por debajo. Salta si CF = 0 y ZF = 0. Salta si no esta por debajo o igual. Salta si CF = 0. Salta si no hay acarreo. Salta si ZF = 0. Salta si no es igual. Salta si ZF = 1 o SF <> OF. Salta si no es mayor. Salta si SF = OF. Salta si no es mayor o igual. Salta si SF = OF. Salta si no es menor. Salta si ZF = 0 y OF = SF. Salta si no es menor o igual.

1.- Resta BX a AX y salta a SIGUE si es cero. 2.- Compara a DH con BL y salta a CONT si BL no es menor o igual. 3.- Compara a 50 con AL y salta a S1 si es mayor o igual, si no CX obtiene el valor de 10. En S1 salta a S2 si AL es mayor, de lo contrario CX obtiene el valor de 20. En S2 CX obtiene el valor de 30.

Ciclos Repetitivos

LOOP Decrementa el registro CX en 1. Transfiere decremento CX si CX no es cero. LOOP corto_objeto.

LOOPE Transfiere decremento CX si CX es diferente de cero, ZF = 1. LOOPE corto_objeto.

LOOPZ Transfiere decremento si CX <> 0 y ZF = 1. Mientras los datos de las tablas sean iguales esta repitiendo y si son diferentes se salen.

LOOPZ corto_objeto.

LOOPNE Transfiere decremento si CX <> 0 y ZF = 0. LOOPNE corto_objeto.

LOOPNZ Transfiere decremnto si CX <> 0 y ZF = 1 Mientras los datos de las tablas sean iguales se salen y continuan cuando sean distintos. LOOPNZ corto_objeto.

De Cadena

a) Prefijos de Repeticion b) Comparacion c) Transferencia d) Busqueda e) Carga f) Almacenar

Prefijos de Repeticion Son operaciones prefijas que hacen que la primitiva operacin de cadena siguiente se repita mientras el rgistro CX no sea cero.

REP Repite sin condicion

REPZ

Repite si es igual

REPNZ Repite si no es igual.

Comparacion

Compara el contenido de la posicin de memoria direccionada por el registro SI con el contenido de la posicin de memoria direccionada por el registro DI.

CMPS Compara 2 cadenas. Resta el Contenido de la posicin de memoria sealada por el registro. DI del contenido de la posicin de memoria apuntada por el registro. DI del contenido de la posicin de memoria apuntada por el registro. SI. CMPS cadena_destino, cadena_fuente.

CMPSB Compara dos cadenas de tipo byte.

CMPSW Compara dos cadenas de tipo palabra.

Transferencia Copian el byte o palabra en [SI] al operando destino byte o palabra en ES:[DI]. El operando destino debe ser direccionable desde el registro ES. Despues se ejecuta la instruccin, ambos SI y DI son incrementados automticamente.

MOVS Transfiere una cadena fuente a una cadena destino. MOVS cadena_destino, cadena_fuente.

MOVSB Transfiere cadenas de tipo byte.

MOVSW Transfiere cadenas de tipo palabra.

Busqueda Resta el byte de memoria o palabra operando de memoria sealada por ES: DI del registro AL o del registro AX. El resultado se ignora y el sealizador apropiado se pone a uno. No se permite anulacion de segmentos. El operando de memoria debe ser direccionable desde el segmento ES.

SCAS Hace una busqueda de cadena. SCAS cadena_destino.

SCASB Hace un busqueda de cadena de tipo byte.

SCASW Hace una busqueda de cadena de tipo palabra.

Carga Transfiere bien un byte o bien un operando palabra desde el operando fuente sealado por el registro SI al registro AL del acumulador o al AX. Si es incrementado automticamente.

LODS Carga cadena fuente

LODSB Carga cadena de tipo byte.

LODSW Carga cadena de tipo palabra.

ALMACENAR Almacena datos cadena. Transfiere el contenido del registro AL o del reg. AX al byte de memoria o palabra de memoria sealada por ES : DI. El operando destino debe de ser direccionable desde el registro ES, no se permite anulaciones de segmentos.

STOS Almacena cadena destino. STOS cadena_destino.

STOSB Almacena cadena de tipo byte.

STOSW Almacena cadena de tipo palabra.

Unidad IV Desarrollo de Programas

Realizar un programa que realice la multiplicacin de dos numeros de una longitud de 32 bits.

[A] [C]

[B] [D]

====================== [ ] [ ] [ ] [ ] [ CA ] [ AD ] [ BC ] [ DB ]

===================================

PILA SEGMENTE PARA STACK STACK DB 64 DUP (PILA) PILA ENDS DATOS SEGMENT PARA PUBLIC DATA P1H DW ? P2H DW ? P3H DW ? P4H DW ? P1L DW ? P2L DW ? P3L DW ? P4L DW ? A DW 120 B DW 378

C DW 689 D DW 245 DATOS ENDS CODIGO SEGMENT PARA CODE PROGRAMA PROC FAR ASSUME CS: CODIGO, SS: PILA, DS: DATOS PUSH DS XOR AX, AX PUSH AX MOV AX, DATOS MOV DS, AX MOV AX, D MOV BX, A MUL BX MOV P1H, DX MOV P1L, AX MOV AX, D MOV BX, B MUL BX MOV P2H, DX MOV P2L, AX MOV AX, C MOV BX, A MUL BX MOV P3H, DX MOV P3L, AX MOV AX, C MOV BX, B

MUL BX MOV P4H, DX MOV P4L, AX MOV DX, P2L MOV CX, P2H ADD CX, P1L ADC CX, P4L MOV BX, P1H ADC BX, 0 ADD BX, P4H ADC BX, P3L MOV AX, P3H ADC AX, 0 RET PROGRAMA ENDP CODIGO ENDS END

Hacer un programa que busque en una lista que se encuentre en el segmento extra la cual esta apuntada por DI usando instrucciones de cadena. El primer elemento de esa lista contiene el nmero de elementos de esa lista; si el dato a buscar se encuentra DX debe regresar con la localidad del dato y CF debe ser 1 si el dato no se encuentra DX debe contener la ultima localidad de la lista y CF=0.

PILA SEGMENT DB 10 DUP ? PILA ENDS EXTRA SEGMENT LISTA DW 4,5,7,6,8 EXTRA ENDS

CODIGO SEGMENT ASSUME CS: CODIGO, SS: PILA, ES: EXTRA PUSH ES SUB AX, AX PUSH AX MOV AX, EXTRA MOV ES, AX MOV CX, ES: LISTA CLD LEA DI, ES: LISTA+2 MOV AX, 3 REPNE SCASW JCXZ D2 JMP D3 D2: SUB DI, 2 MOV DX, DI CLC JMP D4 D3: SUB DI, 2 MOV DX, DI STC D4: CODIGO ENDS END

Realizar un programa que calcule es seno de un numero: Calculo del sen(x) Si x esta entre 0-90 tomar sen(x)

91-180 181-270 271-360

sen(180-x) -sen(x-180) -sen (360-x)

PILA SEGMENT DB 64 DUP (PILA) PILA ENDS DATOS SEGMENT SENO DW 0000, 0174, 0348, 0523, 0697, 0871, 0104, 0121, 1391, 1564, 1736 DW 1908, 2079, 2249, 2419, 2588, 2756, 2923, 3090, 3255, 3420 DW 3583, 3746, 3907, 4067, 4226, 4383, 4539, 4694, 4848, 5000 DW 5150, 5299, 5446, 5591, 5735, 5877, 6018, 6156, 6293, 6427 DW 6560, 6691, 6819, 6946, 7071, 7193, 7313, 7431, 7547, 7660 DW 7771, 7880, 7986, 8090, 8191, 8290, 8386, 8480, 8571, 8660 DW 8746, 8829, 8910, 8987, 9063, 9135, 9205, 9271, 9335, 9396 DW 9455, 9510, 9563, 9612, 9659, 9702, 9743, 9781, 9816, 9848 DW 9876, 9902, 9925, 9945, 9961, 9975, 9986, 9993, 9998, 1000 ANGULO DW 0 DATOS ENDS CODIGO SEGMENT PARA CODE PRUEBA PROC FAR ASSUME CS: CODIGO, SS: PILA, DS: DATOS PUSH AX XOR AX, AX PUSH AX MOV AX, DATOS MOV DS, AX MOV AX, 182

PUSH AX SUB CX, CX CMP AX, 181 JB MENOR MOV CX, 8000H SUB AX, 180 MENOR: CMP AX, 91 JB SENO NEG AX ADD AX, 180 SENO: MOV BX, AX SHL BX, 1 MOV BX, SENO[BX] OR BX, CX POP AX RET PRUEBA ENDP CODIGO ENDS END

Con un ciclo repetitivo calcular la raiz cuadrada de un numero de 16 bits, por medio del metodo de aproximaciones sucesivas: 1A = N/200+2 2A = (N/1A+1A)/2 Si los 2 numeros son iguales o difieren de +- es la raiz.

PILA SEGMENT DB 64 DUP (PILA)

PILA ENDS DATOS SEGMENT PARA DATA DESTINO DW 99 DUP ( ) DATOS ENDS CODIGO SEGMENT PARA CODE PROGRAMA PROC FAR ASSUME CS: CODIGO, SS: PILA, DS: DATOS PUSH DS XOR AX, AX PUSH AX MOV AX, DATOS MOV DS, AX MOV AX, 20 MOV DI, AX MOV BX, 200 MOV BX ADD AX, 2 MOV DESTINO, AX MOV, SI, 0 REGRESO: MOV AX, DI DIV DESTINO [SI] ADD AX, DESTINO [DI] MOV CX, 2 DIV CX MOV DESTINO [SI+2], AX ADD AX, DESTINO [DI] ADD SI, 2 MOV BX, DESTINO [SI]

CMP DESTINO [SI + 2], BX JE FIN MOV AX, DESTINO [SI] SUB AX, BX CMP AX, -1 JE FIN CMP AX, 1 JE FIN JNE REGRESO FIN: RET PROGRAMA ENDP CODIGO ENDS END

BIBLIOGRAFIA

MACRO ENSAMBLER USERS GUIDE BY MICROSOFT Co.

DISK OPERATING SYSTEM TECHNICAL REFERENCE MICROSOFT Co.

IBM PC & XT ASSAMBLY LANGUAGE A GUIDE FOR PROGRAMMERS BRADY COMUNICATIONS Co. Inc.

UNIDAD V INTERRUPCIONES
Maneras que pueden generar una interrupcin : INTERRUPCIONES LOGICAS O DEL PROCESADOR Generadas por el CPU INTERRUPCIONES 0 1 2 madre 3 4 Generadas por el BIOS INTERRUPCIONES 5 6 en una PC 7 8 9 10 INTERRUPCION AH= 0 Modo de video AL= 0 AL = 1 AL = 2 AL=3 AL=4 40 X 25 MONO 40 X 25 COLOR 80 X 25 MONO 80X25 COLOR 320X200 COLOR AH=6 10H VIDEO AH=2 posicin del cursor BH= No. De pag. A desplegar DH=FILA DL=COLUMNA Coprocesador matemtico no reservado en una PC Error de doble excepcin (AT) Temporizador del sistema (IRQ0) Interrupcin del hardware (Teclado) presente FUNCION Print screen Cod. Operacin invalidado(286,386) reservado Punto de ruptura Sobreflujo FUNCION Divide por cero Paso a paso NMI, cuando se genera una falla en la tarjeta Software Procesador Hardware

AL=5

320X200 MONO

scroll hacia arriba

AH = 7 Scroll hacia arriba AL=DISTANCIA ENTRE LINEAS CH= TOPE SUPERIOR DE LA VENTANA CL= COLUMNA IZQUIERDA DH= ESQUINA INFERIOR (FILA) DL= ESQUINA SUPERIOR (COLUMNA)

AH=0A ESCRIBE CARCTER AL=CARCTER A ESCRIBIR BH=PAGINA A DESPLEGAR CX=No DE CARACTERES

AH=0C Escribe pixel DX=FILA CX = COLUMNA

AH=13 Escribe cadena de caracteres ES:BP INICIO DE LACADENA BH = No DE PAGINA BL = ATRIBUTO DE LOS CARACTERES CX = CANTIDAD DE CARACTERES DX= POSICION INICIAL DEL CURSOR AL = 1(EL CURSOR SE DESPLAZA)

BYTE DE ATRIBUTO DEC 00 01 07 135 15 NORMAL Y ALTA INTENSIDAD 112 240 Interrupcion 13 h SERVICIOS A DISCOS. VIDEO INVERSO VIDEO INVERSO Y CENTELLEO CARACTERISTICA NO HAY DESPLIEGUE SUBRAYADO VIDEO NORMAL NORMAL Y CENTELLEO

AH 0 1 2 3 4 5 6 7 8 15 H 16 H 17 H

FUNCION RESET LEE EL ESTADO LEER SECTORES ESCRIBE A SECTORES VERIFICA SECTOES FORMATEA UNA PISTA RESERVADO LEE PARAMETROS DEL DRIV

LEE EL PARAMTERO DEL DRIVE DETECTA CAMBIO DE MEDIA COLOCA TIPO DE DISCO

TIPO DE DRIVE 1.4 MB 720 KB 360 KB 320 KB 720 KB 1.2 MB

TIPO DE MEDIA 1.44MB 720 KB 360 KB 360 KB 720 KB 1.2 MB

TAMAO 3.5 3.5 5.25 5.25 5.25 5.25

TRACK/LADO 80 80 40 40 80 80

SECTORES/TRACK 18 9 9 8 9 15

Reset DL= No. DE DRIVE 0=A 1=B BIT7=0 (Disco flexible) BIT=1(Disco Duro)

Lee el estado DL= No. De drive 01=SE solicito funcin no validad 02= No se encontr la marca de direccion 03= Disco protegido contra escritura 04= Sector no encontrado 20H=Controlador defectuoso 80H=Fuera de sincrona

AH=3 Escribe a sectores ENTRADA: AL= No DE SECTORES DE LA UNIDAD (1-18) CH= No de PISTA (0-79) CL= No DE SECTOR (1-18) DH= No DE CABEZA (1-18) DL= No DE DRIVE ES:BX= BUFFER A LA DIRECCION DE LOS DATOS A ESCRIBIR

AH=2 Leer sectores ENTRADA: LOS MISMOS DATOS DE AH=3

AH=4 Verifica sectores ES:BX=BUFFER CON LA DIRECCION DE LOS DATOS DEL CAMPO

AH=5 Formatea una pista ES:BX=DIRECCION DE LOS CAMPOS DEL TACK A FORMATEAR AL = No de SECTORES A FORMATEAR DH = No. DE CABEZA DL = No DE DRIVE CH = No de TRACK

CAMPO DE DIRECCIONES: Debe de contener una entrada de 4 bytes por cada sector que se va a formatear, esta entrada contiene la siguiente informacin: Byte 0= No de pista 1=No de cabeza 2=No de sector 3=tamao de sector

INTERRUPCION 14 H COMUNICACIN SERIE AH=0 Inicializar la comunicacin AH=1 Envia carcter AL= CARCTER DX= Puerto serie por donde se recibi el carcter

INTERRUPCIONES DEL DOS INTERRUPCION 21 H

AH=1 Leer carcter del teclado AL= ASCII DEL CARCTER

AH=2 Desplegar un carcter o enviar carcter a la pantalla

DL=CARCTER A DESPLEGAR

AH=3 Lee carcter de com1 AL= CARATER RECIBIDO (RECEPCION)

AH=4 Transmision DL=CARCTER A TRANSMITIR

AH= 5 Salida por impresora, sacar un dato por la misma DL=CARCTER A IMPRIMIR

AH=9 Desplegar cadena de acaracteres DS:DX APUNTADOR DE LA CADENA $= TERMINADOR DE LA CADENA

AH=0A Leer cadena del teclado DS:DX =ALMACENAR LA CADENA

AH=3C Crear archivo DS:DX = TRAYECTORIA Y NOMBRE DEL ARCHIVO CX = ATRIBUTO DE LARCHIVO

AX = Retorna con el cdigo mandejador del archivo.

AH = 3D AL=CONTIENE UN CODIGO DE ACCESO 0= ENTRADA 01=SALIDA 02 = E/S

AH=3F Leer un archivo BX= MANEJADOR DEL ARCHIVO CX = No DE BYTES A LEER DS:DX=DIRECCION DEL BUFFER

AH=40 Escribir a un archivo BX=MANEJADOR DEL ARCHIVO DS:DX= Direccion del buffer

AH=3E Cerrar un manejador de archivo BX= MANEJADOR DEL ARCHIVO

ATRIBUTOS DEL ARCHIVO: 01= LECTURA 02=OCULTO 04=SISTEMA 20=E/S

APENDICE A

LENGUAJE ENSAMBLADOR

Hasta FFFF DATOS

CPU

DIRECCION CONTROL

RAM

220 = 1MB

Desde 00000

CPU UNIT CONTROL

REGISTROS

ALU

ES, CS , DS, IP Registros de propsito especifico. ARQUITECTURA 8086 INTERFAZ CON MEM 4 3 2 1 EU Unidad de ejecucin AX, BX, DX, SP, SI, DI Registros de propsito general.

BIU Unidad Interfaz con EU BUS.

Cola de instrucciones. Aqu se almacenan los cdigos y tiene capacidad para almacenar hasta 4. B - BUS ES CS SS-DS IP UNIDAD BIU DE CONTROL

AH BH CH DH SP BP SI DI

AL NL CL DL EU

ALU

FLAGS

12 Registros. Son espacios almacenados en la CPU cuya funcin es: AX Acumulador (Mas importante) BX Base CX Contador DX Datos SI ndice fuente DI ndice Destino BP Apuntador Base SP Apuntador de Fila 8088 Tiene instrucciones de 4 bytes 8086 Tiene instrucciones de 6 bytes CS Segmento de cdigo DS Segmento de dato ES Segmento extra SS Segmento de Pila IP Apuntador de Instrucciones

Propsito General

Propsito Especifico

REGISTRO DE BANDERAS

4004 DATO MAYOR DE 4 BITS.

AX,BX,CX,DX Se encargan de realizar las operaciones 15

AX,BX,CX o DX 7 Reg. L Parte baja 0

Reg H Parte alta SI,DI, BP,SP Sirven como apuntadores de tablas a direccin de la memoria.

DS ES CS SS

64KB 128KB

Segmento EXTRA se utiliza cuando el dato excede los 64kb y puede llegar hasta los 128kb. Almacena una seria de instrucciones durante la operacin. Se usa como almacenamiento temporal de algn procedimiento que se llama en un programa.

IR

REG

BIU Unidad de Interface con el BUS + Acceso a memoria +Leer cdigo de Inst. (IR)

A LU

+Decodificar el cdigo(ID) IP Apuntador Inst.

IP

ID

ID Decodificador Inst. 2 accesos a mem. IR Registro Inst. Incrementar apunt. CICLO FETCH Realiza el proceso paso a paso.

Registros de Bandera. Es un registro de 19 bits. ZERO SIGNO ACARREO SOBREFLUJO DIRECCION ACARREO INTERMEDIO HABILITACION INTERRUPCION PARIDAD DE

ES. Almacena datos durante la ejecucin de un programa, estos datos son almacenados cuando rebasa la capacidad de almacenamiento del segmento de datos. DS Almacena datos durante la ejecucin de un programa. CS Almacena la serie de instrucciones durante la operacin. SS Almacena datos de forma temporal. IP Apunta a la siguiente instruccin a utilizar. Todos estos tienen una longitud de 16 bits. GND BUS DE DIRECCION A14-A8 BUS DE DATOS MULTIPLEXADOS AD7-AD0 NMI INTR CLK GND RESET RDY TEST INTA(QS1) ALE(QS0) 1GND, 2GND 40Vec 9-16 AD7-AD0 1 2 -----8 9 ----16 17 18 19 20 21 22 23 24 25 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 WR(LOCK) IO/M(S2) AT/R(S1) VCC A15 A16/S3 A 17/S4 A18/S5 A19/S6 SS0 MN/MX RD HOLD(R0/GT0) HLDA(R0/GT1)

ALIMENTACION

(-) , (+)

Bus de Direccion y Datos

2-8 A14-A8 39 A15 Para el 8080 el bus de direcciones de datos esta multiplexado del pin 9 al 16 (AD7AD0) y del pin 2 al 8 y 39 (A15-A8) se toma como bus de direccin. En el 8086 se toma del pin 2 al 46 con el 39 (AD15 AD0) como bus de direccin de datos.

8086 y 8088 Estas lneas constituyen el tiempo multiplexado AD15-AD0 AD7-A0 de memoria y el bus de datos de direccin de IO.

17 NMI Seal de interrupcin no mascarable (no espera nada). 18 INTR Seal de interrupcin mascarable. 19 CLK Bus de ciclos de periodos T4 Direccin T2 a T4 Datos Provee del tiempo bsico para el procesador y el controlador de Bus. 21 RESET Le causa a la procesador la terminacin inmediata de la actividad presente 22 RDY Es la seal que enva un perifrico al CPU. Para indicarle que esta listo a recibir otro bloque de informacin. Esto ocurre cuando el CPU acta con un perifrico ms lento. 23 TEST Semforo. La entrada es examinada por la instruccin de Espera. Si la entrada de TEST es baja, la ejecucin es continua, de otro modo el procesador espera un estado de IDLE. 24 INTA Reconocimiento de interrupcin enva la de que la interrupcin ha sido atendida. 25 ALE

Habilita el LATCH de direcciones LATCH. Circuito que retiene informacin que llega del CPU y que enva cuando llega una seal del mismo CPU. 24 QS1, 25 QS0 Proporcionan o generan informacin a la cola de instrucciones

QS0 0 1 0 1

0S4 0 0 1 1

FUNCION NO OPERACION 4 BYTE EN LA COLA COLA VACIA SIGUIENTE BYTE

26 DEN Habilitador de datos. 27 DT / R Transmisor o recepcin de datos. 28 I0/M Transformacin de datos e informacin con un dispositivo de E/S. Este es usado a distinguir un acceso a memoria para un acceso de E/S. 34 SS0 Es lgicamente igual a S0 en el modo mximo. DT/R, I0/M, SS0 La combinacin de SS0, 10/M y DT/R indican al sistema la accin que ocurre en el ciclo de bus de status y que accin est llevando a cabo la CPU. TRANSCEIVER (8286/8287) IO / M. Indica en modo alto que acta con un puerto; M en modo bajo acta con la memoria.

Operando en modo min. 10/M 1 1 1 1 0 0 0 0 DT/R 0 0 1 1 0 0 1 1 SS0 0 1 0 1 0 1 0 1 FUNCIN CONTROLADOR DE BUS 8288 Reconocimiento de interrupciones Lectura de dispositivos E/S Escritura de dispositivos E/S HALT Acceso de cdigo Lectura a memoria Escritura a memoria PASIVO

Operando en modo max. S2 0 0 0 0 1 1 1 1 S1 0 0 1 1 0 0 1 1 SO 0 1 0 1 0 1 0 1

29 WR Seal de control escritura (de salida) 30 HLDA Indica al procesador que puede hacer uso de los buses 31 HOLD Indica que un procesador necesita hacer uso de los buses. Despus que el HLDA le indica el uso de los buses, HOLD indica que deja el procesador de usar los buses.

Actan conjuntamente

HOLD
1.-Necesita hacer uso de los buses

HLDA

HOLD

CPU

2.- Puede hacer uso de los buses 3.-Deja de hacer uso de los bus.

32 RD Seal de control de lectura (De salida) 32 RD MN/MX (Mnimo y Mximo) Indica que modo operar el procesador

35-38

Seales de estado. A19/56, A18/55, A17/54, A16/53 Lneas de estatus. Estas son las 4 lneas de direccin mas significativas para la operacin de memoria. Durante las operaciones de I/O. Estas lneas son bajas. 33 MN/MX Genera seales de control que entran a un decodificador que generan seales de comunicacin que actan con los perifricos. A tierra trabaja en modo Mximo. A 5V trabaja en forma Mnima. Compilacin de la tarjeta madre si opera en modo mnimo o en modo mximo. S6Se encuentra bajo S5 Mantiene el estado de la bandera de interrupciones. S3-S4 Indica que segmento se encuentra activo en ese instante de tiempo. A que segmento se esta accesando. S4 0 0 1 1 S3 0 1 0 1

ES SS CS DS

DIFERENCIAS ENTRE EL 8086 Y 8088 Bus de datos de 16 bit para el 8086 y de 8 bits para el 8088 La cola de instrucciones es de 4 bytes en el 8088 y 6 bytes en el 8086. En el algoritmo del ciclo FETCH, fue combinado en el 8088 y 6 bytes. Se realiza un ciclo FETCH cuando hay espacio en la cola. En el 8086 cuando hay 2 espacios. Los ciclos fetch del 8086 toman 4 ciclos de reloj adicionales. El tiempo de ejecucin en las instrucciones es afectado.

CAMBIOS EN LAS FUNCIONES DE LOS PINES A8-A15. En el 8086 estn multiplexados con los bits de datos. BHE. No tiene significado en el 8088 en su lugar se asigna SS0. SS0. Proporciona la informacin de estado en modo mnimo junto con DT/RE, 10/M. 10/M. Ha sido invertido para ser compatible a la estructura del BUS. LE. Es retardado un ciclo de reloj en modo mnimo al detector HALT.

CONTROLADOR DE INTERRUPCIONES 8259 + Procesador Aux. 8 2 memoria CPU 5 9 + Chequeo de canal DeE/S PERIFERICOS NMI +Error de paridad en m

CPU NMI INTR


Bit de mascara

8087 RAM PARITY Canal E/S

8259A 7 Puerto Paralelo Discos PC Libre Puerto Serie SLOT Libre Libre Teclado Timer/Counter (8253) 6 5 4 3 2 1 0

Se pueden conectar hasta 64 Interrupciones; se ampla conectndolo en cascada; en los sectores libres conectar otro 8259; etc.

LIBRE

8259 LIBRE 8259

1S XA5 XA6 XA7

138

INTRCS
DECODIFICADOR

D4 CS
PARTES QUE FORMAN UN 8259A

XA8 XA9 AEN XA A

APENDICE B

Seales de cascada

15 CAS2

14 GND

13 CAS1

12 CAS0

11

4 BUS DE DATOS D0- D7

3 RD

2 WR

1 CS VCC 28 A11 27 INTA 26 IR7 25

16

17

18

19

20

21

22

23

24

SP/EN

INTR

IR0

IR1

IR2

IR3

IR4

IR5

IR6

PETICIONES DE INTERRUPCIONES

8259A

A X X X 0 1 0 1 0 1 0 1

B X X X 0 0 1 1 0 0 1 1

C X X X 0 0 0 0 1 1 1 1

G2A 1 X X 0 0 0 0 0 0 0 0

G2B X 1 X 0 0 0 0 0 0 0 0

G1 X X 0 1 1 1 1 1 1 1 1

Y1 1 1 1 1 0 1 1 1 1 1 1

DIRECCION ------------------------------------0XH 2XH 4XH 6XH 8XH AXH CXH EXH

Secuencia de pasos de cmo ocurre una interrupcin:

Canal E/S
2.-IR0X 1.-Solicitud D2-D7 IRX 5.Apuntador 5.- de tabla Enviado al cpu 8 bits 6.- cpu obtiene La dir. De la rutina de

PARTE BAJA DEL RAM


1024 LOCAL

TABLA DE VECTORES 4X

INTERRUP.

INTA INTR 4.3.-

INTR INTA

4 X INTERRUP.

CPU
servicio

255 INTERRUP.

Paridad a solicitud

7.- cpu salta la rutina de servicio Consigue el vector desde el 8259

APENDICE C

Diagrama a bloques del controlador programable de interrupciones.

D7 TO D0

BUFFER DEL BUS DE DATOS

INTA DEL CPU

INT AL CPU

LOGICA DE CONTROL

RD WR A11 CS

LOGICA DE L/E

REGISTRO DE SERVICIO

RESOLUCION PRIORIDAD

REG. DE PETICION DE INST.

CAS 0 CAS 1 CAS 2 SP/EN

COMPARADOR / BUFFER CASCADA

REGISTRO DE MASCARA (NMR) DE INTERRUPCIONES

8255. Interfaz Programable Paralelo Interfaz. Es un circuito que se puede programar para establecer la relacin CPU Dispositivos perifricos

CPU

---------------------------------------------INTERFAZ

PERIFERICOS

Comunicacin simple de la seal de envo (STB).

Los controladores de dispositivos hacen interfaz inteligente como los dispositivos externos como unidades de disco, teclados e impresoras. Se dividen en 2 grupos - Propsito general Controladores de dispositivos - Propsito especifico 8272 8254 8255 8275 Funciona de interfaz con discos

8255. Sirve de ayuda en la conexin a la computadora de dispositivos que envan octetos completos, cada vez (o incluso palabras de 12,16 o 24 bits) La transmisin paralelo es til en todas aquellas aplicaciones que requieran unas transmisiones a gran velocidad y utilizan dispositivos no demasiado alejados del computador central. El 8285 viene en chips de 40 terminales, tiene 24 lneas de entrada o de salida para los cuales el usuario puede definir la cantidad de configuraciones. 8251Paralelo P/Transmisiones Cortas 8250 Serie P/Transmisiones largas

A PUERTOS B C

8 Lneas de datos. Puerto. Lugar de acceso de una sea

Velocidad de transmisin 110 a 19200 Bit por segundo. BITS DE ARRANQUE 1, 1 , 2 BITS DE PARIDAD Se usa en calidad de transmisin BITS DE PARO 1, 2 Puede estar habilitado o deshabilitado 1 .

Comunicacin E/S sin protocolo

Comunicacin simple usando la seal de envo STB


DATO

DATO

Comunicacin usando un saludo sencillo STB ACK

Comunicacin usando doble saludo a b c d

DATO

DATO

Su caracterstica principal es que recibe y transmite datos de 1byte . Los puertos se programan de 3 modos. MODO 0. Es una E/S sin, protocolo los 3 puertos se pueden programar en Modo 0 E/S bsica hay 16 maneras de definir la direccin (E/S) de los 4 grupos de bits, los datos sencillamente se envan o se reciben por ellos.

MODO 1. Es una E/S manejando un protocolo. Los nicos puertos que se pueden programar son A y B. E/S habilitada. Los 2 grupos de 4 bits sirven de control y estado y los grupos de8 bits se puede definir como E/S, de este modo el usuario mira un cuarto bit del octeto de estado para saber si el dispositivo externo esta preparado para poderse transmitirse.

MODO 2. Solamente se puede programar el puerto A y este es un modo de bidireccional.

SELECCIN DEL PUERTO PARA L/E A0 0 1 0 0 1 0 A1 0 0 1 0 0 1 AD 0 0 0 1 1 1 WR 1 1 1 0 0 0 RS 0 0 0 0 0 0 OPERACIN Puerto A a BUS de datos de leer entrada Puerto B a BUS de datos de leer entrada Puerto C a BUS de datos de leer entrada BUS de datos a puerto A escribir salida BUS de datos a puerto B escribir salida BUS de datos a puerto C escribir salida

La CPU transmite en paralelo y el equipo recibe en serie, el equipo transmite en serie, el equipo transmite en serie y el CPU recibe en paralelo. TRANSMISION ASINCRONA o Byte de Inf. UA acompaado por lo menos por un bit de arranque y un bit de paro. Bit de paro
DATO

Bit de arranque

10 bits En la transmisin debe haber 2 tipos: A1 0 0 1 1 A0 0 1 0 1 Puerto A Puerto B Puerto C Reg. De control Par. No de bits unos; par Impar. No. De bits unos; impar

Control Del Grupo A

GRUPO A PUERTO A 8 BITS

PA0-PA7 MODO 2 SEALES E/S SIN PROTOCOLO

GRUPO A BUFFER DE DATOS PUERTO C ALTA 4BITS

PO0-PC7

GRUPO B PUERTO C LOGICA DE CONTROL DE E/S CONTROL DEL GRUPO B PARTE BAJA 4 BITS

ESTABLECEN EL PROTOCOLO CON EL PERIFERICO A UTILIZAR. PC0-PC7

GRUPO B PUERTO B 8 BITS PB0-PB7 MODO 0

NC

DATO DE TRANSMISION 2 RECEPCION DE DATOS 3 PETICION DE ENVIO 4 PARA SET READY 5


DATO DE TRANSMISION 2

CLEAR TO SEND 5

SIGNAL GROUND 7

EXTERNAL DEVICE
NC 12 NC 13 NC NC NC NC

RECEIVED LINE SIGNAL DETECTOR 8 TRANSMITED CURREND LOOP DATA 9 NC 10 TRANSMITED CURRENT LOOP DATA 11

EXTERNAL DEVICE

DATO DE TRANSMISION 14 2

15 2 DATO DE TRANSMISION 16 17

RECEIVE CURRENT LOOP DATA 18 NC DATA TERMINAL READY 20 NC RING NC NC 21 INDILATOR 22 23 24 19

RECEIVE CURRENT LOOP RETURN 25

A P E N D I C E

DMA 8237A Facilita la transferencia de los dispositivos que estn solicitando (DMA) acelera el proceso de transferencia a la memoria -Comunicacin IO a memoria -Memoria a IO -Memoria a Memoria Facilita

La ventaja de usar el DMA es que cuando se necesita transferir un numero de datos de manera individual, el procesador simplemente proporciona al 8237A una direccin inicial y una cuenta de palabras enseguida el DMA se encarga de la transferencia.

20

19

18

17

16

15

14

13

12

11

10

DRE00 GND

DRE02 DRE01

DACK3 DRE03

RESET DACK 2

CS CLK

AEN AR0

HLDA ADSTB

5V RD4

MEMR MEMW

IOR IOW

Cuando se coloca en alto indica el control de direccin de datos DB6 DB7 DB5 DACK1 DB4 DACK0 DB3 DB2 DB1 DB0 VCC A0 A1 A2 A3 EOP A4 A5 A6 A7

21

22

23

24

25

26

27

28

29

30

31

32

33 34 35

36 37 38 39

40

Estan multiplexados datos y direcciones

Seales de direccin

8237A

Diagrama de cmo se comunica el controlador de acceso a memoria (DMA) con el CPU y dispositivos perifricos.
BUS DE

LATCH DE AD0-AD15 DIRECC. ALE DATOS


DIRECC.

Memoria
BUS DE DATOS

CPU
Dispositivos perifrico HLDA HOLD

DREQ 0

CUANDO EL CPU CONTESTA AL DMA

HR0 HLDA

DACK0

DMA

8288 El modo mximo se pens para operar con un conjunto ms extenso de circuitos integrados (8288,8286, 8237, 8259) seales usadas en modo mximo las cuales son entrada al controlador de BUS (8288). 10
GND

9
MWTC

8
AMX

7
MRDC

6
AEN

5
ALE

4
DT/R

3
S1

2
CLK

1
10B

8288

10WC

A10NC

10RC

INTR

CEN

DEN

MCE/PDEN

N2

N0

VCC

11
Estado 8086

12

13

14

15

16

17

18

19

20
Canal E/S

seales bus de comando

S0 S1 S2

DECODIFICADOR ESTADO

PROCESO ASIGNACION COMANDOS

MRDC Avance para escribir a memoria MWTC La memoria lee del BUS de Datos AMWC Indicacin de avance al escribir a memoria 10RC 10WC Un dispositivo es ledo y carga los datos Un dispositivo acepta los datos

A10WC Indica que un comando de escritura IO ser enviado.

Control de Entrada

INTA

Reconoce una interrupcin hacia un disp.. un vector de informacin debe colocarse en el BUS.

CLK AEN CEN 10B LOGICA CONTROL PROCESO CONTROL SALIDA


DT/R DEN Transmisin o recepcin de datos Habilita transceptores de datos

MCE/PDEN Lee una direccin en un ALE PIC del BUS de datos durante una interrupcin

GND AEN 10B CEN H abilita direcciones El BUS pertenece a IO a Memoria Habilita lnea de comandos

A P E N D I C E