apuntes lenguaje ensamblador.docx

March 22, 2018 | Author: Roberto Torres | Category: Assembly Language, Bit, Computer Programming, Computer Program, Microprocessor


Comments



Description

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 intención 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 través de un lenguaje establecido. Si ambos participantes emplean el mismo lenguaje la comunicación es directa, sin embargo si no se emplea el mismo lenguaje se requiere una tercera persona que realice la traducción (interprete o traductor). Siendo un instrumento electrónico, una computadora puede “entender” solamente señales eléctricas las cuales son el lenguaje “nativo” de las mismas, de tal manera que si deseamos establecer una comunicación con la computadora debemos aprender este lenguaje electrónico. Este fue el enfoque que usaron los primeros programadores, ya que se vieron obligados a escribir sus programas con una secuencia de códigos numéricos, los cuales correspondían a señales eléctricas dentro de la computadora, a esta forma de programar directamente la maquina se le llamo “programación en lenguaje maquina”. Los lenguajes de maquina producen potencialmente los programas más eficientes, ya que permiten el control directo del cerebro (procesador) del a computadora, con una mínima traslación de código a señal eléctrica. Sin embargo el precio a pagar por esta conveniencia es aprender las instrucciones en forma numérica, como un grupo de dígitos binarios o hexadecimales. Por ejemplo para indicarle a la computadora que realice una suma se tiene que introducir el siguiente patrón binario 0010 1101 o su equivalente en hexadecimal 2D, como se puede observar es muy fácil cometer errores en esta manera de programar. Al pasar el tiempo cuando las computadoras fueron usadas para resolver problemas complejos (en consecuencia programas más grandes), alguien concibió la idea la idea de reemplazar cada código numérico, con una abreviatura conocida del inglés (idioma del país donde se avanzaba en esta ciencia) que fuera fácilmente recordada. Por ejemplo era más fácil recordar una instrucción de suma como ADD que su equivalente patrón en binario (0010 1101) o hexadecimal (2D) y así con las demás instrucciones. Por supuesto, esto requirió un programa adicional para convertir estas abreviaturas a su equivalente código numérico a este programa se le llamó ensamblador y a la manera de programar usando estas abreviaturas se le conoció como programación en lenguaje ensamblador, a estas abreviaturas se le conocen como mnemónicos o mnemotécnicos. El nivel de programación siguiente al ensamblador lo forman los lenguajes que hacen al lenguaje maquina totalmente “transparente” al programador mediante el reemplazo de un grupo de mnemónicos por una palabra o frase totalmente comprensible. Estos lenguajes conocidos como “lenguajes de alto nivel” nos permiten una programación rápida y fácil, sin embargo el programa resultante ocupa más espacio en memoria y se ejecuta más lentamente que su equivalente en ensamblador. En la elección del lenguaje para programar se deben tomar en cuenta varias consideraciones, pero si lo que busca es rapidez en la ejecución o la fijación del programa en un pequeño espacio de memoria entonces la alternativa es programar en lenguaje ensamblador. Para entender completamente la programación del lenguaje ensamblador se deben conocer las características de los procesadores, ya que la programación 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 capítulo vamos a analizarlas características de este microprocesador. 1.1 Genealogía 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 información 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 explicación siguiente contestara la pregunta. En noviembre de 1971 Intel introdujo al mercado el primer microprocesador el 4004 de 44bits el cual tuvo poca aplicación, 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 periféricos. En 1973 surge el 8080 con características mejoradas de su antecesor (8008), más instrucciones, mayor velocidad de procesamiento, más capacidad de manejar vectores de interrupción y suministro de voltaje de alimentación (los anteriores tenían dos). Cuando surgió este procesador, otras compañías lanzaron al mercado sus propios diseños 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 características 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 información.  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 configuración, el uso de cada registro se explicará a continuación. 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 DX) o bien como registros de 8 bits (AH-AL. el área de memoria que puede abarcar es de 64kb. CH-CL. la cual es una estructura de memoria que funciona como un depósito temporal de direcciones y datos. se usa en operaciones de multiplicación y división con datos de 16 bits y en algunas instrucciones de entrada-salida. DH-DL) dependiendo si las operaciones a realizar son de 8 o 16 bits. REGISTRO DE INSTRUCCIÓN (IR) El registro de instrucción (IP). REGISTROS INDICE Y APUNTADORES De la misma forma que se obtiene el código de la próxima instrucción a ejecutarse combinando . o el apuntador de base (BP). estos registros son de propósito general . contiene el offset de la próxima instrucción que se va a ejecutar en la unidad de Ejecución (EU) del 8088. registro que apunta a un segmento “extra” el cual es usado en operaciones de cadena. ES – Segmento extra. . BX. DX – Registro de datos. este registro apunta a la localidad de memoria donde se almacenan las variables del programa. DS – Segmento de datos.REGISTROS DE DATOS Los programas pueden tratar a los registros de datos como 4 registros de 16 bits (AX. por tanto como cada registro es de 16 bits. BX – Registros Base. Este registro es de propósito especial. REGISTROS DE SEGMENTO El 8086/8088 puede mantener los datos y el código de un programa en áreas separadas. SS – Segmento de Stack apunta a la dirección del área de pila. CX. la longitud máxima que puede tener depende directamente del registro. pero algunas instrucciones los manejan con una función específica por ejemplo:     AX – El acumulador es usado en operaciones aritméticas de multiplicación. El 8086/8088 puede trabajar en forma simultánea hasta con 4 registros. empleado en operaciones repetitivas y de cadenas de caracteres. el CS con el apuntador de instrucción (IP). CX – Registro contador. usado para direccionar datos en memoria. operaciones de entrada y salida. Para accesar datos del segmento de datos combina el registro segmento de datos como dirección base y al SI o DI como desplazamiento. 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). y en algunas instrucciones en el manejo de cadenas de caracteres. por tanto estructurarse un programa de 256kb de tamaño. La función de estos registros es la siguiente:     CS – Segmento de código contiene los códigos de instrucción del programa que está siendo ejecutado. BH-BL. división. es decir no se puede programar por el usuario para otras finalidades. estas asignaciones pueden cambiarse. a cada área se le llama segmento. o bien cuando en una resta se produce un préstamo.3 CARACTERISTICAS ADICIONALES DIRECCIONAMIENTO Ya que todos los registros son de 16 bits se podría pensar que el 8088 direcciona solamente 64 kb de memoria (espacio de dirección de los procesadores de 8 bits). BIT 10 – Bandera de Dirección (DF). o incremente (DF=0) a los registros de índice (SI. es similar a la bandera de acarreo solamente que se pone en alto si existe un acarreo del bit 3 al 4 . BIT 11 – Bandera de sobreflujo (OF). El resultado es el mismo ya que se desplaza el valor del segmento a la izquierda cada vez que se le agrega un cero . se activa cuando se está trabajando con Debug en la opción rastreo de un programa. sin embargo este procesador emplea una técnica donde genera una dirección de 20 bits . Realmente el 8088 no multiplica por 16. se activa (=1) si una operación de suma produce un acarreo. esto equivale a multiplicar por 2 de tal manera que desplazando cuatro veces equivale a 2x2x2x2=16. agregando un desplazamiento (offset) de 16 bits al registro de segmento multiplicado por 16 bits al registro de segmento multiplicado por 16 esto es: Dirección física = Reg-seg x 16 + desplazamiento. nos indica la presencia de un error en operaciones con números signados como sigue:  OF es 1 si la suma de 2 números del mismo signo.REGISTRO DE BANDERAS Este registro es el que nos permite tomar decisiones dentro de un programa dependiendo del resultado de una operación aritmética o lógica. en instrucciones de cadena. y se activa cuando el resultado de una operación produce un resultado negativo (bit más significativo =1) en operaciones de bytes o palabras (2 bytes) BIT 8 – Bandera de Trap (TF). se emplea en operaciones con números decimales BIT 6 – Bandera Zero (ZF). causa que el 8088 en forma automática decremente (DF=1). BIT 7 – Bandera de Signo(SF). BIT 2 – Bandera de Paridad (PF). tiene significado solamente en operaciones con signo . rebasa la capacidad de complemento a dos de los operandos.2. se activa si el resultado de una operación es 0. si no que le agrega cuatro ceros al registro de segmento (fig 1. 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 emplea en comunicación de datos.  OF es 1 si el cociente de una operación de división produce un sobre flujo en el registro del resultado (se dividió entre un numero demasiado pequeño)    1. o la resta de dos números de signo opuesto. BIT 4 – Bandera de acarreo Auxiliar (AF). se pone 1 si el resultado de una operación produce un resultado par de bits 1. DI) . con esto el 8088 tiene una capacidad de direccionamiento de 1 Mbyte (16 veces el rango de direccionamiento del 8080) CARACTERISTICAS DEL SOFTWARE Específicamente el 8088 puede realizar operaciones aritméticas con datos de 8 o 16 bits . Así mismo puede manejar cadenas de caracteres (textos) de bytes o palabras con una longitud hasta de 64 Kbytes. sobre números decimales almacenados en forma empaquetada (2 digitados por byte) o desempaquetada (1digito por byte). se calcula como sigue: Dirección Física= 2000*10+10=20010H De esta manera la localidad referenciada es de 20010H. tener miles de instrucciones . siete modos diferentes de accesar la información (direccionamiento). la dirección física (efectiva). Por ejemplo si el registro de segmento tiene una dirección de 2000H y el desplazamiento es de 10 H.15 0 Desplazamiento 15 0 _________________________ + _______________ SUMADOR 19 0 DIRECCION Fig 1. con esto se tiene la posibilidad de realizar combinaciones y asi. El 8088 tiene 92 tipos de instrucciones básicas.2 Como se genera una dirección de 20 bits. la información acerca de la programación de los puertos se puede consultar en los manuales de referencia técnica. los puertos restantes se direccionan colocando el número del puerto en un registro de datos.que este procesador puede realizar. la información acerca de la programación. los puertos pueden establecer la comunicación en forma serial y/o paralela.000 ciclos por segundo. la instrucción más rápida (mover un dato entre registro) se tarda 2 ciclos (420 nanosegundos). *Puerto es un dispositivo normalmente programable que sirve interfaz entre el procesador y dispositivos periféricos. al igual que las localidades de memoria los puertos pueden ser de 8 o 16 bits de capacidad. y la instrucción más lenta (división asignada de 16 bits) 206 ciclos de reloj aproximadamente 43 microsegundos de ejecución. El reloj inicial de estos procesadores lo formaba un cristal que operaba a 4.770.000043 segundos. esto significa que cada ciclo de reloj emplea aproximadamente 210 nanosegundos . 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. como se puede observar la operación más lenta a esta velocidad del procesador tarda 0.* . de Requiere el empleo de software especial. Dec.3). pero el 8088 usa algunas de las direcciones más altas y más bajas para propósitos especiales (fig 1. Los últimos 16 k se suministran con el sistema Figura 1. Espacio que puede utilizarse sin software especial Este espacio puede emplearse para las placas De despliegue de la pc y placas de otros fabricantes.DISTRIBUCION DE LA MEMORIA Mas de 1Mbyte de espacio direccionable de memoria está disponible para programas del usuario. 384 kb opcionales instalados en placas de e/s Área reservada Área reservada Memoria intermedia de visualización monocroma Reservado Memoria intermedia visualización de color Espacio del disco duro Zona de expansión memoria de 192 kb 16 kb de rom del sistema de COMENTARIOS Normalmente se suministran con sist. Los 16 bytes más altos de la memoria mantienen una o más instrucciones de reset del sistema. 000 255 256k 624k 640k 656k 704K 736K 800K 800K 812K 944K 976K 1008K DIRECCIÓN Hexa 0000 40000 40000 90000 A0000 A4000 B0000 B4000 B8000 C8000 CC000 EC000 F4000 FC000 FUNCIÓN 256 kb de ram instalados en la placa del sistema.3 distribución de memoria de la pc. . las que son ejecutadas cada vez que se enciende la computadora. las cuales pueden ser internas o externas algunas de las cuales son usadas por el BIOS y el DOS. De la misma forma que las personas estamos sujetas diariamente a interrupciones por las personas que nos rodean para solicitar nuestra atención. al encender la computadora el valor de las nuevas banderas es cero. Además de los tipos de interrupciones mencionados el 8088 proporciona 251 tipos más. se produce cuando en operaciones aritméticas con signo el resultado sobrepasa al máximo número positivo o a l mínimo negativo. TIPO 2 – Interrupción no mascarable. ocurre cuando en procesos de depuración de un programa este se ejecuta paso a paso. TIPO 3 – Breakpoint . ocurre cuando una operación produce un resultado grande que no entre en el registro de destino. cas una se reconoce con un único código de identificación (un numero entre 0 y 255) que se utiliza para apuntar al vector de interrupciones. ocurre cuando se colocan puntos de ruptura en un programa. De los 256 tipos de interrupciones. el cual es una localidad de memoria que mantiene la dirección de la rutina que maneja dicha interrupción. es un tipo de interrupción que no puede ser bloqueada. TIPO 1 – Paso a paso. 5 son internas del procesador y son las siguientes: TIPO 0 – Error de división. TIPO 4 – Sobreflujo. . El 8088 puede reconocer 256 tipos de interrupciones. se produce cuando un evento catastrófico ocurre (perdida de energía).INTERRUPCIONES. 6. Hay varios ensambladores disponibles para los usuarios de computadoras personales: -ASM. para esto se debe convertir el programa ejecutable en un modulo relocalizable o reentrante. Las constantes en el programa fuente que se proporcionan pueden ser aceptadas de las siguientes formas: Binario. 3.EXE). Decimal.Convertir el programa fuente en código ejecutable.. 2. -MASM. Son introducidos como una secuencia de dígitos reconocidos por el patrón decimal (0-9).Ejecutar el programa.. PASOS AL DESARROLLAR UN PROGRAMA 1.Introducirlo en la computadora usando un programa editor. esto requiere de un plan o diagrama de flujo del programa. se difieren de lo esperado depurar el programa con el DEBUG. en cualquier lugar disponible de la memoria. (Macro Ensambler) que se ejecuta en PC´s con al menos 96kb de memoria.Verificar los resultados del programa. para esto se debe de usar el programa MASM. El sistema operativo DOS tiene la habilidad de almacenar el programa ejecutable (. seguidos por la letra D.. que forma parte de los comandos del sistema operativo tiene esta finalidad. El programa LINK. El cual se ejecuta en PC´s que tienen menos de 64 kb de memoria.Definir lo que se pretende que la computadora haga. el trabajo del ensamblador es convertir en este programa fuente que podemos comprender en código objeto que la maquina puede “entender”. 5. Una secuencia de 1´s y 0´s seguidos por la letra B. en el MASM se pueden definir algunas operaciones que no es posible realizar con el pequeño ensamblador (ASM). .. 7..Basándose en el diagrama de flujo codificarlo en base a las instrucciones del lenguaje ensamblador.OBJ se debe pasar a ejecutable.El programa con extensión ..UNIDAD II PSEUDO-OPERACIONES EN ESAMBLADOR Como se mencionó con anterioridad el programa escrito en mnemónicos se le conoce como “programa fuente”. 4.. los demás pueden ser opcionales.DI Orden de salto si GET_COUNT esta en otro segmento: GET_COUNT LABEL FAR MOV CX. una etiqueta debe tener como máximo 31 caracteres. Cada campo puede estar separado del otro por al menos un espacio.147Q.876”. Secuencia de 0-9 y A-F. el 8088 debe cargar el desplazamiento (OFFSET) de la etiqueta en IP y el valor del segmento CS. Son una cadena de letras. esto permite a otras instrucciones dentro del programa referirse a esta localidad por su nombre y no por su dirección (localidad de memoria en números) . ejemplo: 0A23H. este salto es NEAR. Cada línea de instrucción en lenguaje ensamblador puede tener como máximo los siguientes campos: [ETIQUETA:]MNEMONICO[OPERANDO].Si la etiqueta a donde se va a saltar esta en otro segmento diferente al de la instrucción que ordena el salto. CONSIGUE LADIRECCION DEL DATO.Hexadecimal. números o símbolos. este salto se puede realizar de dos maneras: 1. el primer carácter debe ser una letra y debe terminar con dos puntos ( : ).Si la etiqueta esta en el mismo segmento de código que el de la instrucción que ordena el salto.. encerrados entre comillas (“”). ETC][. seguidos por la letra h. 2. El campo de la etiqueta asigna un nombre simbólico a una localidad de inicio en una institución. el 8088 solamente carga el desplazamiento de la etiqueta en el registro IP . Hace que el 8088 transfiera el control a la instrucción almacenada a partir de la localidad GET_count . NEAR & FAR LABELS . permaneciendo CS con su valor. ejemplo: “ hola como te llamas?”. ejemplo: 1470. Octal. ”0987.. El 8088 tiene instrucciones que realizan un salto de la localidad GET_count. Secuencia de dígitos del 0 al 7 seguidos por la letra Q u D. Ejemplo: GET_COUNT: MOV CX. JMP GET_COUNT. Carácter. OPERANDO2. No se deben emplear como etiquetas nombres de registros o códigos de instrucciones.123. este salto se puede realizar de dos maneras.DI.DI .COMENTARIO] Como puede observarse de los cuatro campos solamente el campo NMONICO es obligado. Orden de salto en el mismo segmento: GET_COUNT : MOV CX. los operandos entre si se deben separar por comas (.) por ejemplo: MOV CX. Pero a diferencia de las instrucciones de las pseudo operaciones no generan código objeto. En operaciones con dos operandos el de la izquierda es el operando destino. las cuales se divididen en tres grupos principales: DATOS ASSUME COMMENT INCLUDE DB DW DD ENDS EQV = PROC SEGMENT END ENDP EXTRN .). apartar memoria para almacenamiento temporal. el operando fuente no varía su contenido. el campo del comentario se debe proceder por punto y coma(. mientras que el de la derecha es el operando fuente . el campo del operando es obligatorio en algunas instrucciones y puede no estar presente en otras .DX El campo del operando CX. El campo del operando indica al procesador donde localizar los datos con los cuales se va a operar por ejemplo: MOV CX. mnemónico dice el ensamblador cuantos operandos y de qué tipo serán obtenidos. El Macro Assembler proporciona 59 diferentes Pseudo operaciones. las pseudo operaciones pueden definir símbolos.Limpia el contador de datos PSEUDO OPERADORES Los pseudo operadores dan direcciones al ensamblador (más que al microprocesador).DX indica al 8088 que copie el contenido del registro DX en CX . etc.0 . Cuando esté presente el campo del operando se deberá separar del mnemónico por al menos un espacio en blanco.EL CAMPO MNEMONICO El campo del mnemónico es en donde se especifica el carácter o caracteres que representan el código de la instrucción que se va a ejecutar por el procesador . se usa para hacer indicaciones de lo que esta realizando el programa fuente haciendo con esto mas claro el programa. El campo del comentario es opcional. Esto es lo mismo que EQU 56. En cualquier parte del programa Pseudo operaciones de definición de datos. esta puede ser una constante de 16 bits. Dentro de este grupo de pseudo operadores están EQU el cual define una expresión en forma permanente y el símbolo de igualdad (=) el cual define a una expresión que puede redefinirse en cualquier parte del programa. Un valor constante y permanente . pero ahora .. Aparta 2 bytes en memoria . La mayoría de los programas usan localidades de memoria para contener datos .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 definición de símbolos.DW(Define Word).Segmento prefijo y operando CONST = 56 CONST= 57 CONST= CONST+] . Aparta bytes en memoria 2. ejemplo: K EQU 1024 B EQU [BP+1] P8 EQU DS:[BP + 8] . Las pseudo operaciones que definen símbolos permiten asignar un nombre simbólico a una expresión. Una vez asignado el nombre se puede usar en cualquier parte del programa donde se use la expresión. Referencia indexada . el ensamblador cuenta con res pseudo operadores para apartar espacio en memoria: 1..DB (Define Byte). otro nombre simbólico . una referencia indexada. un segmento prefijo y operando o nombre de instrucción . El valor de const puede ser redefinido . empleando un signo de interrogación. Mínimo valor de 1 byte signado.90. . Máximo valor de 1 byte signado.. . . encabezados de tablas.0.] [name] DD expresión [.63. esto permite almacenar mensajes de error. Se puede así mismo definir el cálculo de un valor constante en memoria.3 DUP (63) Así mismo es posible definir una variable sin asignarle un valor previo. . o de tablas: MIN_POR_DIA DW 60*24 B_TABLA DW 0.-24. . .-24. En el ejemplo anterior hay caracteres repetitivos.3.] Donde expresión puede ser una variable. .63 El límite para definir datos es el ancho de una línea (132 columnas). existe una operación llamada DUP. 507. Máximo valor constante con signo.0. valores numéricos o de cadena . . 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” .90.507. .DD(Define Double Word). Aparta 4 bytes en memoria Los formatos generales para estas pseudo operaciones don los siguientes: [name] DB expresión [. ejemplo: HIGH_TEMP DB ? AVG_WEIGHT DB ? La declaración anterior reserva un total de 2 bytes en memoria . BUFFER DW 7. colocar tablas (bloques de localidades de memoria referenciadas bajo un nombre).98 DUP (?) . . sin embargo estas localidades no están inicializadas no se debe considerar que tienen cero almacenado en este espacio de memoria.12. la cual permite la definición de los caracteres que se repiten de la siguiente manera: B_TABLA DW 3 DUP (0). por ejemplo: BU_MAX DB 255 BS_MAX DB 127 BS_MAX DB -128 .] [name] DW expresión [. .63. Se aparta 200 bytes de memoria La pseudo operación DB también acepta una cadena de caracteres como expresión . ellos no especifican que tipo de segmento esta siendo definido. EXTRA). Un segmento de datos puede tener la siguiente forma : DATOS SEGMENT A B CUADRADOS DATOS ENDS DB ? DB ? DB 1. Un nombre definido de esta manera puede ser nombre de variable.25. El modulo en el cual esta variable se encuentra .4. generalmente esta pseudo operaciones coloca posteriormente del nombre del segmento de código . en el de DATOS. EXTRN. Las pseudo operaciones de referencia externa permiten hacer uso de información que está definida en otros archivos y por tanto en cualquier parte del sistema . los datos y variables con los que se va a trabajar. Por ejemplo supongamos que deseamos accesar a la localidad de memoria TOTAL desde dos módulos distintos. .NEAR. .9. .36 Las palabras SEGMENT y ENDS marcan los limites de un segmento de programa.16. las pseudo operaciones que entran dentro de este grupo son: PUBLIC. en el segmento de código se almacena el programa.WORD.] Donde name es el símbolo definido en el otro modulo de lenguaje ensamblador y type puede ser BYTE . Una pseudo operación separada (ASSUME) es la que le indica al procesador a cual de los 4 registros pertenece un segmento dado . Esta pseudo operación hace que los símbolos declarados de esta manera están disponibles para otros programas que estén encadenados junto al módulo actual. La declaración de esta pseudo operación identifica símbolos que son declarados como PUBLIC en otros módulos. pero no un nombre definido por EQU o =. se puede definir como se indica a continuación : PUBLIC TOTAL TOTAL DW 25 Y el modulo desde el cual es referenciado puede ser: EXTRN TOTAL: WORD Pseudo operaciones de SEGMENT/PROCEDURE.DD. ABS o un nombre definido por EQU. el formato es como sigue: EXTRN NAME.Pseudo operaciones de referencia externa. STACK. en el de STACK se almacenan datos y direcciones que pueden ser utilizados de manera temporal. DATA. Las pseudo operaciones SEGMENT y ENDS parten al programa en segmentos los cuales pueden ser de 4 tipos (CODE. ejemplo: . TYPE [. FAR. al hacerlo se desemsamblan los códigos de instrucción del procedimiento con lo que se evita tener que teclearlos nuevamente. . . y al terminar se debe emplear la pseudo operación RET para que retorne al programa de donde fue llamado por ejemplo: CERCANO PROC NEAR MOV AX. CODIGO ENDS Note que explícitamente hacemos cargado la dirección del segmento de datos (DATOS). . . Un procedimiento esta formado por un conjunto de instrucciones las cuales están agrupadas bajo un nombre y son llamadas con CALL seguido del nombre del procedimiento. DS:DATOS MOV AX. CX RET CERCANO ENDP .AX . NEAR.CODIGO SEGMENT ASSUME CS: CODIGO. DATOS MOV DS. un procedimientopuede ser definido del tipo PUBLIC . Las pseudo operaciones PROC y ENDP marcan el inicio y final de un procedimiento. FAR. MOV AX. la pseudo operación ASSUME no se encarga de esto. . BX . . PROC/ENDP. Se pueden fácilmente pasar parámetros a las macros cada vez que son llamadas. MACROS Una macro es una secuencia de declaraciones en ensamblador (instrucciones y pseudo operaciones). que pueden aparecer varias veces en un programa. Al iguala que los procedimientos las macros son nombres asignados.Puede ser definido de la siguiente manera: PUBLIC LEJANO LEJANO PROC FAR MOV CX.12 . .Las macros so dinámicas. pero solo una instrucción (END) es frecuentemente usada. el código 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. . La desventaja de las macros frente a los procedimientos es que hacen al programa de maquina mas grande. .. Esta pseudo operación marca el final de cualquier programa fuente . sin embargo los programadores prefieren el uso de macros por las siguientes razones: 1. una vez que se ha definido la macro se una el nombre en vez de repetir la secuencia de instrucciones. El 8088 proporciona varias pseudo operaciones para control de ensamble. . MACROS VS PROCEDIMIENTOS Aunque Macros y Procedimientos proporcionan una manera simplificada de realizar instrucciones no son lo mismo. en contrate el procesador reemplaza el nombre de la macro por sus códigos cada vez que es llamada. con alguna modificación opcional cada vez que es llamado. Pseudo operaciones para control de ensamble. debe ser incluida en cualquier programa. RET LEJANO ENDP Cuando el 8088 llama a un procedimiento coloca en el área del STACK la dirección de la instrucción actual. a los procedimientos solo se les puede pasar para metros desde registros o localidades de memoria. ejecuta el procedimiento recupera el valor de la dirección al encontrar la pseudo operación RET. Operadores Relacionales 4.AY AX..Las macros pueden crearse y guardarse en un librería. Formato de las macro-instrucciones. La pseudo operación ENDM. hay 5 clases de operadores: 1.Operadores Lógicos 3.... VERDE ADD AX.Operadores que retornan valores 5.Terminado.AZUL. Es una secuencia de instrucciones que definen lo que hace la macro..AX ENDM Cuando se llama SUMA_MEM VERDE.ROJO equivale a: MOV AX. Toda macro tiene 3 partes: 1.Cuerpo. 2.Operadores Aritméticos 2. 3.Encabezados.-Las macros son rápidas. SUMA_MEN MACRO MOV ADD AX..Operadores de atributo ..AY MOV ZZ.2.. El procesador no tiene retardos por llamadas y retornos de instrucciones como en los procedimientos. AZUL MOV ROJO.. El cual contiene el nombre de la macro y opcionalmente una lista de parámetros los cuales pueden ser pasados a la macro cada vez que es llamada. AX OPERADORES Un operador es un modificador en el campo del operando de una declaración en el modulo ensamble. 3. OPERADORES ARITMETICOS Los operadores numéricos empleados en el ensamblador combinan operandos numéricos y producen un resultado numérico. [ DI + 5 ] MOV CX. los operadores aritméticos mas frecuentemente usados son: Suma (+) Resta (-) Multiplicación (*) División (/) Ejemplos: TABLA DW TABLA + 2 MOV CX. LE. Verdadero si operando_1 es menor que operando_2. Verdadero si operando_1 es menos o igual que operando_2. COMPARA_1 LT 20 . GE. Produce resultado verdadero si los operandos son diferentes. la decalracion: MOV AX. De esta forma si COMPARA_1 es una constante predefinida . 21/2 OPERADORES LOGICOS Los operadores relacionales comparan dos valores numéricos o direcciones de memoria en el mismo segmento y producen un resultado es uno de los siguientes números: 0000 si la relación es falsa FFFF si la relación es verdadera. Compara los valores de los operandos y produce un resultado verdadero si son iguales. NE. LT. Verdadero si operando_1 es mayor o igual que operando_2. Los operadores relacionales usados son: EQ. de esta forma los operadores SEG y OFFSET retornan los valores del segmento y desplazamiento respectivamente de alguna variable o etiqueta. El operador TYPE retorna un valor numérico indicando el tipo de variable o etiqueta utilizada en el programa. 5 De otra manera si C1 GE 20 es verdadero produce FFFF como resultado y al realizar la AND con 6 .0FFFFH Si COMPARA_1 es menor que 20. permanece este valor como resultado y se generaría la siguiente línea: MOV AX. OPERADORES QUE RETORNAN VALORES Este grupo contiene operadores pasivos los cuales proporcionan información acerca de variables y etiquetas en el programa . y con 6 si es mayor a 20 la declaración que realiza esto es lo siguiente: MOV AX. OFFSET TABLA Cargan los valores del segmento y desplazamiento de TABLA en los registros AX y BX.0000 Si COMPARA_1 es mayor o igual a 20 Debido que los operadores relacionales generan solamente dos resultados posibles. ((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 operación lógica AND genera este valor como resultado y se realiza: MOV AX.Se ensambla como: MOV AX. si el valor es de una variable entonces: TYPE = 1 si es BYTE TYPE = 2 si es WORD Si el dato es una etiqueta : . si TABLA fuera una variable en el segmento de datos: MOV AX . y como : MOV AX.6 5. 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. raramente se les usa solos. SEG TABLA MOV BX. Retorna el numero de bytes o palabras apartados por la variable. el 8088 automáticamente considera que DS es el registro de segmento. 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: . dan la opción de cambiar los offsets que el 8088 asigna por default. el apuntador PTR proporciona la especificación a un operando del tipo BYTE. . por tanto la siguiente instrucción: MOV AX. por ejemplo. SS: . si el operador emplea como operandos SI. 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. ES:[SI] Ordena al 8088 emplear ES en lugar de DS. DI o DX con offset.TYPE = 1 si es NEAR TYPE = 2 si es FAR Los operadores LENGHT Y SIZE tienen significado solamente con variables definidas por la pseudo operación DUP. WORD o distancia NEAR-FAR. este atributo nos permite referenciar byte en una tabla de palabras por ejemplo: TABLA DW 100 DUP (?) La declaración : PRIMER_B EQU BYTE PTR TABLA Asigna a PRIMER_B la dirección del primer byte que esta localizado en TABLA . ejemplo: TABLA DW 100 DUP (1) MOV CX. Los operadores HIGH y LOW aceptan una dirección numérica 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. LENGHT. ES: . inicia la copia de los datos almacenados en la localidad FUENTE .del programa al ambiente del sistema operativo PUSH DS XOR AX.0 .30. 0 MOV DESTINO +1.se coloca la direccion del Nuevo segment de datos MOV AX. DS:DATOS.40 DESTINO DB 4 DUP (?) DATOS ENDS CODIGO SEGMENT PARA ´CODE´ PROGRAMA PROC FAR ASSUME CS:CODIGO .AX PUSH AX .PROGRAMA EJEMPLO TITLE PROMGRAM EJEMPLO PAGE. 0 MOV DESTINO+2. 132 STACK SEGEMENT PARA STACK ´STACK´ DS 64 DUP (´STACK´) DATOS SEGMENT PARA ´DATA´ FUENTE DB 10.Las siguientes 3 lineas definen un área de stack para el retorno .20.0 MOV DESTINO+3.DATOS MOV DS. SS:STACK . AX MOV DESTINO. AL MOV AL. FUENTE MOV DESTINO+3. AL MOV AL. AL MOV AL.hacia la tabla DESTINO en orden inverso MOV AL. para control de ensamble Unidad III INSTRUCCIONES . FUENTE + 2 MOV DESTINO+1.. AL RET PROGRAMA ENDP CODIGO ENDS END PROGRAMA . declaración de directivas . FUENTE+1 MOV DESTINO+ 2. FUENTE +3 MOV DESTINO. .Movimiento de Cadenas 6.Control de Transferencias 5.Transferencia de Datos 2... 2357H MOV AX.Interrupciones 7. Ejemplo: Tabla DW 57H. 89H..Aritmeticas 3.. 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.. 67H. . 100H..Manipulacion de Bits 4.1. TABLA AX===> 57H Por Registro Se da solamente entre registros de 8 a 16 bits.Control de Procesador Existen diferentes maneras dentro del ensamblador. 360H Indirecto por Registro Se usa un registro para direccionar. [BX] . TABLA[DI] . Ejemplo: MOV AX. Ejemplo: MOV AX. Base Relativa Cuando se un registro base mas un apuntador numerico. [BX+2] Indexado Directo Cuando se usa un apuntador indice. BX MOV CL. AH Inmediato. 5000 MOV TABLA. Ejemplo: MOV BX. Ejemplo: MOV CX.Ejemplo: MOV AX. Entre corchetes se considera como apuntador. OFFSET TABLA MOV AX. fuente XLAT tabla-fuente entrada/salida: mnemonico IN OUT sintaxis IN acum. mem32 Transferencia de Banderas: LAHF SAHF PUSHF PUSHF POPF POPF LAHF SAHF MOV. de un espacio fuente a un espacio destino. mem32 LES reg16. fuente PUSH fuente POP destino XCHG destino. Se utiliza par transferir o la transferencia de datos. acum Transferencia de Direcciones LEA LDS LES LEA reg16.Transferencia de Datos Existen 4 maneras de transferir datos: a) Propósito General b) Entrada / Salida c) Transferencia de Direcciones d) Transferencia de Banderas Proposito Gral: mnemonico MOV PUSH POP XCHG XLAT sintaxis MOV destino. . mem16 LDS reg16. puerto OUT puerto. POP. 389H mov BX. .Destino * reg16 * reg8 * localidad de memoria fuente * localidad de memoria * dato inmediato * reg16 * reg8 . XCHG. Recupera un dato del area de la pila. de segmento de código como destino. Decrementa SP en 2 y el operando es colocado en la parte superior de la pila. solo a través de otro registro. Toma la palabra señalada por el puntero SP y la pone en el operando destino e incrementa el puntero de la pila en 2. Destino * registro * memoria fuente * registro * memoria mov AX. PUSH.No se permite usar el reg. 24H xchg AX. (byte o palabra) con su operando destino.No es permitida la transferencia de una localidad de memoria a otra.No se permite asignarle el valor de una variable a un reg. XCHG destino.No se permite transferir un dato inmediato a un reg. de tipo de dato coincidente y viceversa. BX =================> AX = 24H Y BX = 389H . . . Intercambia el valor de la fuente. de segmento. de segmento. Mete un dato al area de la pila. fuente. OUT puerto. Puerto equ 38h In AX(16 bits). Se utiliza para meter un dato que llega a la computadora de un puerto. . puerto. 15 xlat TABLA toma a A1 como indice y el valor que encuentra en esa localidad se lo retorna en AL. Se utiliza para sacar un dato de un puerto o perifericos de e/s. byte a puerta inmediata [dx]. IN acumulador. IN Sustituye el contenido del registro AL o AX por el contenido de la puerta asignada. acumulador. Si la puerta se especifica con un byte de datos en la linea es permitido el acceso fijo a las puertas 0 a 255. direcciona maximo 256 localidades. XLAT traslación_tabla. puerto AH(8 bits) OUT Saca palabra. El dato transferido puede ser un byte o una palabra de datos. Usa el registro AL como apuntador base a una tabla tipo byte.XLAT Realiza una traslación de bytes de tabla lookup. mov BX. Offset tabla mov AL. 2. LES destino. LEA destino. lds DX. AF. tabla lea BX. numeros. lea BX. ZF. 0= c f bandera de acarreo 2= p f bandera de paridad . 4. PF y CF en ciertos bits del registro AH. AX LEA Transfiere desplazamiento de fuente a destino. numeros LES Almacena el direccionamiento del segmento en una variable inmediata y el desplazamiento lo almacena en el segmento extra. 6. LAHF Desplaza los registros de señalización SF. fuente. Carga una direccion efectiva de un desplazamiento de memoria. les BX. Almacena en AH el estado de algunas banderas: Ah (0.out puerto. datos[di] LDS Almacena el direccionamiento del segmento en una variable inmediata y el desplazamiento del segmento al segmento de datos. 7). fuente. XX.16.4= a f bandera de acarreo intermedio 6= z f 7= s f bandera de bit de zero. SS:PILA PRUEBA PROC FAR PUSH DS . XX. PF.56. SAHF Almacena en AH los señalizadores SF. AF. Copia el registro AH a los registros bandera. XX.8. bandera de bit de signo. 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.69 LOCAL DW 981H DATOS ENDS CODIGOS SEGMENT ASSUME CS: CODIGO.9.45. DS:DATOS. ZF. CF. OFFSET TABLA LEA BX. TABLA MOV CL.XOR AX. [BX] MOV AL. TABLA XCHG BH. 5 XLAT TABLA LDS DX. DAT1 MOV AX. AH RET PRUEBA ENDP CODIGO ENDS END Instrucciones Aritmeticas SUMA . AH LAHF MOV AL. 4 MOV AX. AX PUSH LOCAL POP CX MOV DI. TABLA[DI] MOV CX. 4169H XCHG AL. AX PUSH AX MOV DS. 573H MOV BX. cuando se utilizan los 8 bits para almacenar dos digitos. destino = destino + fuente {suma} Realiza la suma de dos operandos.ADD destino. y el resultado se le devuelve al destino. . destino = destino + fuente + c f {suma con acarreo} Suma dos operandos con arrastre. y los tiene listo para una operación de division. Ajuste decimal para la suma (trabaja en forma empaquetada). o una localidad de memoria. 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. Solamente se ejecutara después de una instrucción ADD que deja un resultado de un byte en el registro AL. que devolvera un resultado no empaquetado. fuente. Contiene el contenido de AL en un registro en un digito decimal sin empaquetar. Toma el valor mas bajo(menos significativo) de un digito. Incrementa en 1 el contenido de un reg. Destino * registro * localidad de mem fuente * registro * localidad de mem * dato inmediato AAA Ajuste ascii para la suma (trabaja en forma desempaquetada). AF > indica que hay un digito mayor que nueve. entonces se suma un 1 a los 2 operandos. 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. CF > cuando las banderas estan habilitadas. INC. ADC destino. El resultado se almacena en el operando destino. si CF esta inicializado a l. fuente. {resta} Resta el operando fuente del operando destino. El resultado se almacena en el primer operando. Hace negativo un registro o una localidad de memoria. destino = destino – fuente. Contenido en destino. {resta con acarreo} Suma el segundo operando al señalizador de arrastre. fuente. destino = destino – fuente – cf. DEC destino Decrementa en 1 algun registro o una loc. {esto hace que CF sea puesto a 0}. de mem. El resultado se almacena en el operando destino. la suma 1 y devuelve el resultado del operando formado el complemento a 2. y ese resultado es restado del primer operando. SBB destino. SUB destino. excepto cuando el operando es cero. NEG destino Resta el operando de cero.Resta. fuente. 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: . El señalizador de arrastre esta a 1. 760h ADC DX. 760h. 188h SUB AX. AX c) Sumar 9 y 8 de num3 y almacenar el resultado en BCD en num 4 mov BH. AL . DX b) Restar 760h de 188h y almacenar el resultado en DX mov AX. BH DAA mov num4. 98h ADD AX. 1573h mov DX. num3 + 1 mov AL. AX mov num2+2. 8. num3 ADD AL.num1 dw num2 dw num3 db num4 db 1573h. 17h ? 9. 760h mov DX. 120 ? a) Sumar 1 y 2 almacenar resultado en num2 mov AX. 17h mov num2. 98h. 17h e) Decrementar 9. 98h SUB AX. 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 operación de multiplicación con signo. 760h SBB CX. 1573h mov CX. (MUL) (IMUL) Fuente fuente * registro * loc. de mem. Division DIV . incrementar 120.d) Restar 2 de 1 mov AX. Realiza una division sin signo. Si el operando byte fuente especifica.(-62)(43) . Ejemplos: 1). el registro AX es dividido por el operando byte. almacenando el cociente en el registro AL y resto en el registro AH. Los 16 bits mas significativos del dividendo son almacenados en DX. IDIV fuente. el registro AX es dividido por el operando byte. Si se especifica un operando fuente de byte. almacenando el cociente en el registro AL y el resto en el registro AH.. el cociente en AX. Un operando palabra fuente divide a DX : AX por la palabra. El resto tiene el mismo signo que el dividendo y es siempre menor que el dividendo. 10 MUL BX 2). Los 16 bits mas significativos del dividendo son almacenados en DX el cociente en AX y el resto en DX.(325)(10) mov AX. 47 mov BX.10000/10 4). 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 operación de division con signo... 570 MUL BX 3).(47)(570) mov AX. y el resto en DX.. Un operando palabra fuente. 325 mov BX. divide DX:AX por la palabra. En cualquier otro caso el resultado es uno. XOR devuelve un 1 a las posiciones correspondientes donde los operandos son opuestos. realiza una OR exclusiva de todos los bits. fuente. fuente. 10 mov DX... 62 NEG AL mov BL.mov BX.Rotar 3. . NOT Cambia cada bit del operando y devuelve el resultado al operando. el resultado se almacena en el operando destino. OR destino. 43 IMUL BL Instrucciónes de manipulación de bits 1. las otras combinaciones de bits dan cero. XOR destino. El resultado contiene cero en aquellas posiciones donde los operandos comparados son ambos uno o cero. XOR Compara cada bit de los operandos fuente y destino.Girar Logicas AND El resultado contiene 1 en aquellas posiciones donde ambos operandos contenian unos (1).. 10000 DIV DX mov AL. fuente. OR Realiza la operación OR inclusiva de los dos operandos. AND destino.Logicos 2. Aquellos pares de bits correspondientes que contienen cero son cero en el operando destino. no son afectados los señalizadores. El OF y CF estan a cero. SAR Giro aritmetico a la derecha. a) Transferencia Incondicional b) Transferencia Condicional c) Ciclos Repetitivos Incondicional . destino * registro * loc. Cada bit del resultado se pone a uno. fuente. SHL Giro logico a la izquierda. TEST Realiza la operación AND logica bit a bit de dos operandos. SHR Es un giro logico a la derecha. en cualquier otro caso el bits era un cero. RCL Rotar a la izq. TEST destino. cuando los correspondientes bits de ambos operandos son 1. con acarreo. Transferencia ROL Rotar a la izquierda. El resultado de la instrucción no se utiliza y solamente son modificados los señalizadores apropiados.NOT destino. ROR Rotar a la derecha. de memoria fuente * registro * loc. RCR Rotar a la derecha con acarreo. de memoria * dato inmediato Rotar y Girar SAL Giro aritmetico a la izquierda. CX = 0. Salta si SF = OF. Salta si ZF = 1 o SF <> OF. Salta si CF = 1 o ZF = 1. Salta si hay acarreo. . Condicional Instrucción Descripción JA JAE JB JBE JC JCXZ JE JG JGE JL JLE JNA Salta si CF = 0 y ZF = 0. Salta si esta por debajo o igual. Salta si esta por encima. RET. Salta si ZF = 1. Salta si es mayor o igual. Cuando se completa el procedimiento llamado. Salta si es menor o igual. Salta si esta por debajo. Salta si es igual. continua la ejecución del programa que se llamo de la instrucción que sigue a la instrucción CALL. Salta si el contador del reg. JMP (objeto). Salta si ZF = 0 o SF = 0. Salta si SF <> OF. CALL parametro_operando. Salta si CF = 0. JMP Transfiere el control del programa a una instrucción diferente sin almacenar ninguna información devuelta. entonces el control del programa se transfiere al operando parametro. Salta si CF = 1 o ZF = 1. Salta si CX = 0. Salta si es mayor.CALL Hace que la direccion de la siguiente instrucción se almacene en la pila. Salta si es menor o igual. Salta si es menor. Continua la ejecución 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 instrucción CALL. Salta si CF = 1. Salta si CF = 1. Salta si esta por encima o igual. Salta si no es mayor. Salta si SF = OF. si no CX obtiene el valor de 10. Salta si no esta por debajo. Ciclos Repetitivos LOOP Decrementa el registro CX en 1. de lo contrario CX obtiene el valor de 20. LOOPE corto_objeto. Salta si ZF = 0 y OF = SF. 1. LOOPZ Transfiere decremento si CX <> 0 y ZF = 1. Salta si no es menor o igual. Salta si no esta por debajo o igual. Salta si CF = 0. Salta si no esta por encima o igual. . Salta si CF = 0 y ZF = 0. Salta si no hay acarreo. Salta si no es menor.. En S2 CX obtiene el valor de 30.. ZF = 1.Compara a 50 con AL y salta a S1 si es mayor o igual.. 3. LOOPE Transfiere decremento CX si CX es diferente de cero.Resta BX a AX y salta a SIGUE si es cero. Salta si SF = OF.JNAE JNB JNBE JNC JNE JNG JNGE JNL JNLE Salta si CF = 1. LOOP corto_objeto. En S1 salta a S2 si AL es mayor. Salta si CF = 0. Salta si ZF = 0. Transfiere decremento CX si CX no es cero. Salta si no es mayor o igual. Salta si ZF = 1 o SF <> OF. Salta si no es igual.Compara a DH con BL y salta a CONT si BL no es menor o igual. 2. Mientras los datos de las tablas sean iguales esta repitiendo y si son diferentes se salen. LOOPNZ corto_objeto. LOOPNE 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 operación de cadena siguiente se repita mientras el rgistro CX no sea cero.LOOPZ 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. REP Repite sin condicion REPZ . LOOPNE Transfiere decremento si CX <> 0 y ZF = 0. CMPSW Compara dos cadenas de tipo palabra. Comparacion Compara el contenido de la posición de memoria direccionada por el registro SI con el contenido de la posición de memoria direccionada por el registro DI. DI del contenido de la posición de memoria apuntada por el registro. . cadena_fuente. El operando destino debe ser direccionable desde el registro ES. Transferencia Copian el byte o palabra en [SI] al operando destino byte o palabra en ES:[DI]. Resta el Contenido de la posición de memoria señalada por el registro. CMPS Compara 2 cadenas. CMPS cadena_destino. ambos SI y DI son incrementados automáticamente. SI.Repite si es igual REPNZ Repite si no es igual. DI del contenido de la posición de memoria apuntada por el registro. Despues se ejecuta la instrucción. CMPSB Compara dos cadenas de tipo byte. SCASB Hace un busqueda de cadena de tipo byte. SCAS cadena_destino. MOVSW Transfiere cadenas de tipo palabra. Carga Transfiere bien un byte o bien un operando palabra desde el operando fuente señalado por el registro SI al registro AL del acumulador o al AX. MOVS cadena_destino. MOVSB Transfiere cadenas de tipo byte. El operando de memoria debe ser direccionable desde el segmento ES. Busqueda Resta el byte de memoria o palabra operando de memoria señalada por ES: DI del registro AL o del registro AX. SCASW Hace una busqueda de cadena de tipo palabra. . SCAS Hace una busqueda de cadena.MOVS Transfiere una cadena fuente a una cadena destino. cadena_fuente. El resultado se ignora y el señalizador apropiado se pone a uno. No se permite anulacion de segmentos. Si es incrementado automáticamente. . Transfiere el contenido del registro AL o del reg.LODS Carga cadena fuente LODSB Carga cadena de tipo byte. STOS cadena_destino. STOS Almacena cadena destino. STOSB Almacena cadena de tipo byte. El operando destino debe de ser direccionable desde el registro ES. STOSW Almacena cadena de tipo palabra. LODSW Carga cadena de tipo palabra. AX al byte de memoria o palabra de memoria señalada por ES : DI. no se permite anulaciones de segmentos. ALMACENAR Almacena datos cadena. Unidad IV Desarrollo de Programas Realizar un programa que realice la multiplicación 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 . AX MOV AX. DX MOV P3L. DATOS MOV DS. A MUL BX MOV P3H.C DW 689 D DW 245 DATOS ENDS CODIGO SEGMENT PARA ‘CODE’ PROGRAMA PROC FAR ASSUME CS: CODIGO. DX MOV P2L. B MUL BX MOV P2H. B . SS: PILA. C MOV BX. D MOV BX. D MOV BX. AX MOV AX. AX MOV AX. AX MOV AX. DS: DATOS PUSH DS XOR AX. DX MOV P1L. AX PUSH AX MOV AX. A MUL BX MOV P1H. C MOV BX. P1L ADC CX. AX MOV DX. P2H ADD CX. 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. El primer elemento de esa lista contiene el número de elementos de esa lista.5. DX MOV P4L. P4H ADC BX. P3L MOV AX.6. P3H ADC AX. 0 ADD BX. P1H ADC BX.8 EXTRA ENDS .MUL BX MOV P4H. 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.7. PILA SEGMENT DB 10 DUP ? PILA ENDS EXTRA SEGMENT LISTA DW 4. P4L MOV BX. P2L MOV CX. ES: LISTA CLD LEA DI. 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) . ES: LISTA+2 MOV AX. 2 MOV DX. AX PUSH AX MOV AX.CODIGO SEGMENT ASSUME CS: CODIGO. EXTRA MOV ES. ES: EXTRA PUSH ES SUB AX. AX MOV CX. 3 REPNE SCASW JCXZ D2 JMP D3 D2: SUB DI. SS: PILA. DI CLC JMP D4 D3: SUB DI. 2 MOV DX. 1000 ANGULO DW 0 DATOS ENDS CODIGO SEGMENT PARA ‘CODE’ PRUEBA PROC FAR ASSUME CS: CODIGO. 9271. 9659. 8090. 9396 DW 9455. 5735. 4383. 9848 DW 9876. DS: DATOS PUSH AX XOR AX. 4067. 9975. 5591. 1391. 6018. 7986. 182 . 0697. 9902. 7071. 6156. 5446. 9945. 8571. 0104. 9993. 0523. 3255. 8191. 2249. 6691. 9335. DATOS MOV DS. 9816. 7660 DW 7771. 5877. 9986. 2079. 9205. 3420 DW 3583. 9612. 8386. 9135. 9743. 9702. 0174. 7431. 8910. 0121. 8660 DW 8746. 5299. 0348. 5000 DW 5150. 7313. 0871. 8480. 4694. 8987. SS: PILA. 3746. 9563. 7193. 9925. 4226. 4848. 9998. 3907. 9510. 3090.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. 6427 DW 6560. 8829. 2756. 2923. 7880. 6293. 2588. AX PUSH AX MOV AX. 1736 DW 1908. 6819. 8290. 9063. 2419. 6946. 4539. 1564. 9781. 7547. 9961. AX MOV AX. 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. 386) reservado Punto de ruptura Sobreflujo FUNCION Divide por cero Paso a paso NMI.UNIDAD V INTERRUPCIONES Maneras que pueden generar una interrupción :    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 posición del cursor BH= No. cuando se genera una falla en la tarjeta Software Procesador Hardware . A desplegar DH=FILA DL=COLUMNA Coprocesador matemático no reservado en una PC Error de doble excepción (AT) Temporizador del sistema (IRQ0) Interrupción del hardware (Teclado) presente FUNCION Print screen Cod. Operación invalidado(286. De pag. 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 CARÁCTER AL=CARÁCTER 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 TAMAÑO 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 función 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 sincronía 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 información: Byte 0= No de pista 1=No de cabeza 2=No de sector 3=tamaño de sector INTERRUPCION 14 H COMUNICACIÓN SERIE AH=0 Inicializar la comunicación AH=1 Envia carácter AL= CARÁCTER DX= Puerto serie por donde se recibió el carácter INTERRUPCIONES DEL DOS INTERRUPCION 21 H AH=1 Leer carácter del teclado AL= ASCII DEL CARÁCTER AH=2 Desplegar un carácter o enviar carácter a la pantalla . sacar un dato por la misma DL=CARÁCTER 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 .DL=CARÁCTER A DESPLEGAR AH=3 Lee carácter de com1 AL= CARATER RECIBIDO (RECEPCION) AH=4 Transmision DL=CARÁCTER A TRANSMITIR AH= 5 Salida por impresora. 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 .AX = Retorna con el código mandejador del archivo. . APENDICE A . LENGUAJE ENSAMBLADOR Hasta FFFF DATOS CPU DIRECCION CONTROL RAM 220 = 1MB Desde 00000 CPU UNIT CONTROL REGISTROS ALU . CS . Aquí se almacenan los códigos y tiene capacidad para almacenar hasta 4. DI – Registros de propósito general. SP. BX. SI. Cola de instrucciones. BIU – Unidad Interfaz con EU BUS.ES. ARQUITECTURA 8086 INTERFAZ CON MEM 4 3 2 1 EU – Unidad de ejecución AX.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 . IP – Registros de propósito especifico. B . DS. DX. DX  Se encargan de realizar las operaciones 15 AX. Se usa como almacenamiento temporal de algún procedimiento que se llama en un programa.CX.CX o DX 7 Reg.SP  Sirven como apuntadores de tablas a dirección de la memoria. BP.BX. AX. L Parte baja 0 Reg H Parte alta SI. 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 operación.DI. .BX.12 Registros. Son espacios almacenados en la CPU cuya función 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 código DS  Segmento de dato ES  Segmento extra SS  Segmento de Pila IP Apuntador de Instrucciones Propósito General Propósito Especifico F REGISTRO DE BANDERAS 4004 DATO MAYOR DE 4 BITS. . IP ID ID Decodificador Inst. (IR) A LU +Decodificar el código(ID) IP Apuntador Inst. 2 accesos a mem.IR  REG BIU  Unidad de Interface con el BUS + Acceso a memoria +Leer código de Inst.  Incrementar apunt. IR Registro Inst. CICLO FETCH  Realiza el proceso paso a paso. Es un registro de 19 bits.  Almacena datos durante la ejecución de un programa. IP  Apunta a la siguiente instrucción a utilizar. (+) . GND BUS DE DIRECCION A14-A8 BUS DE DATOS MULTIPLEXADOS AD7-AD0 NMI INTR CLK GND RESET RDY TEST INTA(QS1) ALE(QS0) 1GND. CS  Almacena la serie de instrucciones durante la operación. estos datos son almacenados cuando rebasa la capacidad de almacenamiento del segmento de datos. Todos estos tienen una longitud de 16 bits. SS  Almacena datos de forma temporal. ZERO SIGNO ACARREO SOBREFLUJO DIRECCION ACARREO INTERMEDIO HABILITACION INTERRUPCION PARIDAD DE ES. 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 (-) .Registros de Bandera. DS  Almacena datos durante la ejecución de un programa. de otro modo el procesador espera un estado de “IDLE”. 23 TEST  Semáforo. 8086 y 8088  Estas líneas constituyen el tiempo multiplexado AD15-AD0 AD7-A0 de memoria y el bus de datos de dirección de IO. 18 INTR  Señal de interrupción mascarable. 24 INTA  Reconocimiento de interrupción envía la de que la interrupción ha sido atendida. Para indicarle que esta listo a recibir otro bloque de información. 21 RESET  Le causa a la procesador la terminación inmediata de la actividad presente 22 RDY  Es la señal que envía un periférico al CPU. Si la entrada de TEST es baja. La entrada es examinada por la instrucción de “Espera”. 25 ALE . la ejecución es continua. 17 NMI  Señal de interrupción no mascarable (no espera nada). En el 8086 se toma del pin 2 al 46 con el 39 (AD15 – AD0) como bus de dirección de datos. 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 dirección. Esto ocurre cuando el CPU actúa con un periférico más lento. 19 CLK  Bus de ciclos de periodos T4 Dirección T2 a T4  Datos Provee del tiempo básico para el procesador y el controlador de Bus. SS0  La combinación de SS0. Indica en modo alto que actúa con un puerto. DT/R. 28 I0/M  Transformación de datos e información con un dispositivo de E/S. 25 QS0  Proporcionan o generan información 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. Este es usado a distinguir un acceso a memoria para un acceso de E/S. Habilita el LATCH de direcciones  LATCH. 24 QS1. I0/M. . TRANSCEIVER (8286/8287) IO / M. 34 SS0  Es lógicamente igual a S0 en el modo máximo. M en modo bajo actúa con la memoria. 27 DT / R  Transmisor o recepción de datos. Circuito que retiene información que llega del CPU y que envía cuando llega una señal del mismo CPU. 10/M y DT/R indican al sistema la acción que ocurre en el ciclo de bus de status y que acción está llevando a cabo la CPU. 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 FUNCIÓN CONTROLADOR DE BUS 8288 Reconocimiento de interrupciones Lectura de dispositivos E/S Escritura de dispositivos E/S HALT Acceso de código Lectura a memoria Escritura a memoria PASIVO Operando en modo max..-Necesita hacer uso de los buses  HLDA  HOLD  CPU 2.Puede hacer uso de los buses 3. 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  Señal 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. HOLD indica que deja el procesador de usar los buses. Después que el HLDA le indica el uso de los buses. Actúan conjuntamente HOLD 1.Operando en modo min. 32 RD  Señal de control de lectura (De salida) 32 RD MN/MX (Mínimo y Máximo)  Indica que modo operar el procesador 35-38 .-Deja de hacer uso de los bus. S4 0 0 1 1 S3 0 1 0 1 ES SS CS DS . Durante las operaciones de I/O.  A tierra trabaja en modo Máximo.  Estas son las 4 líneas de dirección mas significativas para la operación de memoria. Compilación de la tarjeta madre si opera en modo mínimo o en modo máximo. A que segmento se esta accesando. Estas líneas son bajas. A17/54. A19/56. 33 MN/MX  Genera señales de control que entran a un decodificador que generan señales de comunicación que actúan con los periféricos. A16/53  Líneas de estatus. A18/55.  A 5V trabaja en forma Mínima. S6Se encuentra bajo S5 Mantiene el estado de la bandera de interrupciones. Señales de estado. S3-S4 Indica que segmento se encuentra activo en ese instante de tiempo. . 10/M. SS0. Ha sido invertido para ser compatible a la estructura del BUS. 10/M. CAMBIOS EN LAS FUNCIONES DE LOS PINES      A8-A15. El tiempo de ejecución en las instrucciones es afectado.  Los ciclos fetch del 8086 toman 4 ciclos de reloj adicionales. Se realiza un ciclo FETCH cuando hay espacio en la cola.  En el algoritmo del ciclo FETCH. fue combinado en el 8088 y 6 bytes. LE. Proporciona la información de estado en modo mínimo junto con DT/RE. BHE.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 8086 cuando hay 2 espacios. En el 8086 están multiplexados con los bits de datos. No tiene significado en el 8088 en su lugar se asigna SS0. Es retardado un ciclo de reloj en modo mínimo al detector HALT. CONTROLADOR DE INTERRUPCIONES 8259 + Procesador Aux. etc. en los sectores libres conectar otro 8259. . 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 amplía conectándolo en cascada. 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 . Señales 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 . INTA INTR 4.-Solicitud D2-D7 IRX 5.3.- INTR INTA 4 X INTERRUP.. De la rutina de PARTE BAJA DEL RAM 1024 LOCAL TABLA DE VECTORES 4X INTERRUP. Paridad a solicitud 7..Secuencia de pasos de cómo ocurre una interrupción: Canal E/S 2.cpu obtiene La dir..-IR0X 1.cpu salta la rutina de servicio Consigue el vector desde el 8259 .de tabla Enviado al cpu 8 bits 6. CPU servicio 255 INTERRUP.Apuntador 5. APENDICE C . 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. . Es un circuito que se puede programar para establecer la relación CPU  Dispositivos periféricos CPU ---------------------------------------------INTERFAZ PERIFERICOS Comunicación simple de la señal de envío (STB). Interfaz Programable Paralelo Interfaz.Diagrama a bloques del controlador programable de interrupciones. DE PETICION DE INST. CAS 0 CAS 1 CAS 2 SP/EN COMPARADOR / BUFFER CASCADA REGISTRO DE MASCARA (NMR) DE INTERRUPCIONES 8255. tiene 24 líneas de entrada o de salida para los cuales el usuario puede definir la cantidad de configuraciones. BITS DE ARRANQUE  1. Se dividen en 2 grupos .16 o 24 bits) La transmisión paralelo es útil en todas aquellas aplicaciones que requieran unas transmisiones a gran velocidad y utilizan dispositivos no demasiado alejados del computador central. Sirve de ayuda en la conexión a la computadora de dispositivos que envían octetos completos. 1 ½ .Los controladores de dispositivos hacen interfaz inteligente como los dispositivos externos como unidades de disco. cada vez (o incluso palabras de 12. Puerto.Propósito especifico 8272 8254 8255 8275 Funciona de interfaz con discos 8255. teclados e impresoras. El 8285 viene en chips de 40 terminales. 8251Paralelo P/Transmisiones Cortas 8250 Serie P/Transmisiones largas A PUERTOS B C 8 Líneas de datos. 2 Puede estar habilitado o deshabilitado 1 .Propósito general Controladores de dispositivos . . Lugar de acceso de una seña Velocidad de transmisión 110 a 19200 Bit por segundo. 2 BITS DE PARIDAD Se usa en calidad de transmisión BITS DE PARO  1. los datos sencillamente se envían o se reciben por ellos.  Es una E/S manejando un protocolo. de este modo el usuario mira un cuarto bit del octeto de estado para saber si el dispositivo externo esta preparado para poderse transmitirse.Comunicación E/S sin protocolo Comunicación simple usando la señal de envío STB DATO DATO Comunicación usando un saludo sencillo STB ACK Comunicación usando doble saludo a b c d DATO DATO Su característica principal es que recibe y transmite datos de 1byte .  Solamente se puede programar el puerto A y este es un modo de bidireccional. Los puertos se programan de 3 modos. MODO 2. . Los únicos puertos que se pueden programar son A y B. protocolo los 3 puertos se pueden programar en Modo 0 E/S básica hay 16 maneras de definir la dirección (E/S) de los 4 grupos de bits.   Es una E/S sin. E/S habilitada. MODO 1. Los 2 grupos de 4 bits sirven de control y estado y los grupos de8 bits se puede definir como E/S. MODO 0. De bits unos. TRANSMISION ASINCRONA o Byte de Inf. De control Par. el equipo transmite en serie.SELECCIÓN 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 OPERACIÓN 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. impar . el equipo transmite en serie y el CPU recibe en paralelo. UA acompañado por lo menos por un bit de arranque y un bit de paro. No de bits unos. Bit de paro DATO Bit de arranque 10 bits En la transmisión debe haber 2 tipos:   A1 0 0 1 1 A0 0 1 0 1 Puerto A Puerto B Puerto C Reg. par Impar. No. PC0-PC7 GRUPO B PUERTO B 8 BITS PB0-PB7 MODO 0 .Control Del Grupo A GRUPO A PUERTO A 8 BITS PA0-PA7 MODO 2 SEÑALES 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. NC 1 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 D . el procesador simplemente proporciona al 8237A una dirección inicial y una cuenta de palabras enseguida el DMA se encarga de la transferencia.DMA 8237A Facilita la transferencia de los dispositivos que están solicitando (DMA) acelera el proceso de transferencia a la memoria -Comunicación 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. 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 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 dirección 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 Señales de dirección 8237A . BUS DE LATCH DE AD0-AD15 DIRECC. Memoria BUS DE DATOS CPU Dispositivos periférico HLDA HOLD DREQ 0 CUANDO EL CPU CONTESTA AL DMA HR0 HLDA DACK0 DMA .Diagrama de cómo se comunica el controlador de acceso a memoria (DMA) con el CPU y dispositivos periféricos. ALE DATOS DIRECC. un vector de información debe colocarse en el BUS. 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 señales 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 Indicación de avance al escribir a memoria 10RC 10WC Un dispositivo es leído y carga los datos Un dispositivo acepta los datos A10WC Indica que un comando de escritura IO será enviado. CLK AEN CEN 10B LOGICA CONTROL PROCESO CONTROL SALIDA DT/R DEN Transmisión o recepción de datos Habilita transceptores de datos MCE/PDEN Lee una dirección en un ALE PIC del BUS de datos durante una interrupción GND AEN 10B CEN H abilita direcciones El BUS pertenece a IO a Memoria Habilita línea de comandos .8286. 8237.. 8259) señales usadas en modo máximo las cuales son entrada al controlador de BUS (8288).8288 El modo máximo se pensó para operar con un conjunto más extenso de circuitos integrados (8288. Control de Entrada INTA Reconoce una interrupción hacia un disp. A P E N D I C E E .
Copyright © 2024 DOKUMEN.SITE Inc.