P. 1
50376472 Uso de Procedimientos y Macros Lenguaje Ensamblador

50376472 Uso de Procedimientos y Macros Lenguaje Ensamblador

|Views: 54|Likes:

More info:

Published by: Luis Enrique Gonzalez Rodriguez on Jan 10, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/21/2013

pdf

text

original

Ingeniería en Sistemas Computacionales

LENGUAJE ENSAMBLADOR

³Uso de Procedimientos, Macros o Librerías y uso del altavoz de la computadora´

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Librerías

Índice Contenido págs.

Introducción .............................................................................................................................................................. 3 Interfaz programable de periféricos (ppi) 8255....................................................................................................... 10 Temporizador 8253 u 8254....................................................................................................................... 12 Desarrollo y código................................................................................................................................................... 18 Conclusiones ............................................................................................................................................................ 21 Referencias .............................................................................................................................................................. 22

Instituto Tecnológico de la Laguna

Pag. 2

según los casos. una instrucción capaz de saltar a una dirección dada guardando el actual valor del registro IP. Usando la programación modular el problema se divide en módulos. antes de que se produzca ese salto. Lo importante es que el puntero de la Instituto Tecnológico de la Laguna Pag. los valores de CS e IP. éste ejecuta su función y una vez que la termina. la dirección a la que debe transferir el control. siempre que tengamos en cuenta que al llegar al final. mientras que el segundo se le conoce como salto FAR o lejano. o bien indirecto a través de un registro o un campo que contendrá la dirección a la que tiene que apuntar IP a partir de ese momento. El primer tipo de salto se denomina NEAR o cercano. de tal forma que para ejecutar dichas sentencias. Uso de Procedimientos. permite codificar bloques de sentencias a los que se asigna un nombre. d) Control de otros módulos. la necesidad de la estructuración es. La diferencia es que. como es lógico. de tal forma que ésta puede recuperarse posteriormente para volver y continuar la ejecución por el punto en el que se interrumpió. Al trabajar con lenguaje ensamblador. Si la tarea asignada a cada submódulo es demasiado compleja. CALL guarda en la pila el valor actual del registro IP. Esta toma como parámetro un valor inmediato. ya que transfiere la ejecución a una dirección de forma incondicional. éstos deben extraerse. No hay que olvidar que estamos trabajando a un nivel muy bajo. Cada uno de estos módulos se analiza. si cabe. la pila debe encontrarse en la misma situación en la que se encontraba al principio. Si hemos introducido valores. aún es más vital. En ensamblador se opera con direcciones. La programación modular es uno de los métodos de diseño mas flexibles y poderosos para el mejoramiento de la productividad de un programa. Este proceso de descomposición continúa hasta que cada módulo tenga una tarea específica que ejecutar. justo antes de devolver el control. e) Alguna combinación de los anteriores. La transferencia mágica de parámetros. En el primero se necesitan 16 bits. c) Manipulación de datos. Procedimientos. regresa el control al módulo desde donde fue llamado. Esta tarea puede ser: a) Entrada. más que cualquier otro lenguaje al que esté acostumbrado. si el salto es a una dirección de otro segmento. es algo que no existe. al menos la mayoría de ellos. Macros y Librerías MODULARIZACION Y PROGRAMACIÓN HIBRIDA Introducción. se les conoce como procedimientos. en caso necesario. puede requerir una gran lista de sentencias ejecutables. desde cualquier punto de la aplicación basta con introducir ese identificador y. b) Salida. por la que unos valores facilitados tras un identificador aparecen como argumentos del procedimiento invocado. o bien. Sí tenemos a nuestra disposición. dependiendo del lenguaje. Una vez que se ha guardado el valor de IP o de CS e IP. en caso de que el salto sea una dirección dentro del mismo segmento que indica CS. En muchos casos es el módulo principal. 3 . no obstante. Aparentemente CALL es similar a la instrucción JMP. Los lenguajes de alto nivel. puesto que cualquier tarea. tan sólo la dirección relativa al segmento que indica CS y en el segundo los 32 bits precisos para dar valor a CS e IP tras guardarlos en la pila. A estos bloques de sentencias. En el Lenguaje ENSAMBLADOR esta técnica se puede llevar a cabo mediante Macros y Procedimientos. a pesar de que éstas pueden estar representadas mediante etiquetas que hacen más fácil nuestro trabajo.Lenguaje Ensamblador Introducción. se ejecutan las instrucciones que haya en la dirección indicada. cualquier tarea. Estas pueden efectuar. se codifica y se prueba de preferencia por separado. La instrucción que nos permite invocar a un procedimiento es CALL. Todo programa contiene un módulo denominado programa principal que controla todo lo que sucede. donde cada una de los cuales ejecuta una única actividad o tarea y se codifican independientemente de otros módulos. por sencilla que parezca. si se transfiere el control a un submódulo. facilita los parámetros adecuados. funciones o métodos. éste deberá descomponerse en otros módulos más pequeños.

siempre que necesite codificar el conjunto de instrucciones. en el momento de volver. generalmente por una llamada previa a CALL. se puede pensar. MASM y TASM cuentan con un preprocesador que. como C o Pascal. genera una instrucción en lenguaje máquina. La etiqueta se usa para llamar al PROCEDIMIENTO con una instrucción CALL. Sintaxis: etiqueta etiqueta Donde: etiqueta: constante: PROC [NEAR | FAR] secuencia de sentencias RET constante ENDP Es un símbolo asignado como nombre al procedimiento. La instrucción RET. Es necesario definir un nombre específico para la macro. porque. si se conoce el número de WORDS pasadas al STACK como argumentos. Macros y Librerías pila. <para una llamada NEAR. Esta instrucción realiza su trabajo colocando en el STACK la dirección de la siguiente instrucción y transfiriendo el control a la dirección especificada por el operando. esté apuntando a los valores que introdujo en ella la instrucción CALL. el nuevo offset es cargado en IP. para hacerlo más legible. recuperándose la dirección de la pila. en un lenguaje de alto nivel consistente de macro enunciados. cualquier RET dentro del PROCEDIMIENTO automáticamente toma la misma distancia. la distancia pude ser NEAR ó FAR. en ensamblador. la etiqueta contiene la dirección de inicio de la primera instrucción del procedimiento. ¿Cómo sabrá la instrucción RET si debe recuperar de la pila sólo el valor de IP o también el de CS? La respuesta es que depende de cómo se haya definido el procedimiento al que se invocó con CALL. por tanto. de tal forma de liberar esos argumentos después de salir del procedimiento. entonces. 4 Es el nombre del procedimiento.Lenguaje Ensamblador Uso de Procedimientos. se encargan de generar las instrucciones ensamblador adecuadas. El ensamblador tiene facilidades que el programador puede usar para definir macros. entenderá lo importante que es que SS:SP conserven los valores que tenían al iniciar la ejecución del procedimiento. Las macros son útiles para los siguientes propósitos: -Simplificar y reducir la cantidad de codificación repetitiva. La sintaxis de la macro es la siguiente: Instituto Tecnológico de la Laguna Pag. STACK se usa para pasar argumentos a un procedimiento. Una definición de macro aparece antes de cualquier definición de segmento. Teniendo en cuenta esto. SP es decrementado en dos y el offset es cargado en el STACK . la instrucción RET podría transferir la ejecución a un punto incorrecto y causar la caída del sistema. de no ser así. Si la instrucción CALL guarda el actual puntero de instrucción y transfiere la ejecución al procedimiento. Sintaxis: CALL etiqueta etiqueta: Macros. sólo codifique el nombre de la macro y el ensamblador genera de manera automática las instrucciones que el programador definió. . similar a JMP. -Reducir errores causados por la codificación repetitiva. constante puede contener ese número. Pero para cada enunciado codificado en un lenguaje de alto nivel. Para cada instrucción simbólica que el programador codifica. Para macros que se necesiten incluir en un programa. primero tiene que definirlas. la instrucción RET tiene el efecto inverso. Después. también es un salto incondicional. con la diferencia de que la dirección a la que saltará debe estar almacenada en la pila. a partir de ciertas palabras claves como PROC FAR o PROC NEAR. el compilador genera muchas instrucciones de lenguaje máquina. -Linealizar un programa en ensamblador. A este respecto. devolviéndola a CS e IP e incrementando éste último para proceder a ejecutar la instrucción que sigue al CALL que invocó el procedimiento. junto con el conjunto de instrucciones en ensamblador que la macro va a generar. Se transforma en la dirección del procedimiento.

Cuando el ensamblador encuentra la macro instrucción. 5 . Por ejemplo. Para asegurar que cada nombre generado sea único. Examinaremos una definición de macro sencilla que inicializa los registros de segmento para un programa .. La directiva MACRO en la primer línea le indica al ensamblador que las instrucciones que siguen hasta ENDM (³fin de la macro´). deben de estar definidos en alguna parte del programa o deben de ser dados a conocer de alguna otra forma al ensamblador. generando las instrucciones: expansión de la macro.EXE INIZIALIZA MACRO MOV AX. La definición de la macro siguiente llamada PROMPT. Los nombres a los que se hace referencia en la definición de la macro. el argumento mudo MNESAJE también aparece en la instrucción LEA. MENSAJE INT 21H ENDM Cuando se usa la macroinstrucción. Un argumento mudo. Si utiliza la macro más de una vez en el mismo programa y el ensamblador define los elementos de datos para cada aparición. proporciona el uso de la función 09h del DOS para desplegar cualquier mensaje. se pueden definir parámetros en ella como argumentos mudos. AX ENDM El nombre de esta macro es INICIALIZA. el programador debe proporcionar el nombre del mensaje. Ya que el programa contiene una definición de la macro INICIALIZA. aunque otras macros están diseñadas para ser utilizadas cualquier número de veces y cada vez que el ensamblador genere la misma expansión de la macro. a falta de una entrada. Macros y Librerías Deberá ser único. PROMPT MACRO MENSAJE LEA AH.. busca en una tabla de instrucciones simbólicas y. codifique la directiva LOCAL inmediatamente después de la instrucción macro.DS y ES. el cual hace referencia en el segmento de datos terminada por un signo de pesos ($). y reunir los requisitos de un símbolo. En forma subsecuente se puede utilizar la macroinstrucción INICIALIZA en el segmento de código en donde se quiera inicializar los registros.] secuencia de sentencias. Algunas macros necesitan que se definan elementos de datos y etiquetas de instrucciones dentro de la definición de la macro. ENDM Donde: nombre: parámetros: Uso de Procedimientos. Son símbolos que actúan como receptores de valores pasados como argumento a la MACRO cuando ésta es llamada. indica al ensamblador que haga coincidir su parámetro con cualquier aparición del mismo parámetro en el cuerpo de la macro. AX MOV ES. busca macro instrucciones.parámetro]. el ensamblador sustituye el cuerpo de la definición.Lenguaje Ensamblador nombre MACRO [parámetro [. son parte de la definición de la macro. los nombres duplicados harían que el ensamblador generará un mensaje de error. en una definición de una macro. @DATA. Para hacer la macro más flexible. Instituto Tecnológico de la Laguna Pag. aunque es aceptable cualquier otro nombre válido que sea único. AX. @DATA MOV DS. Un programa utilizaría la macroinstrucción INICIALIZA una sola vez. 09H LEA DX. La directiva EXITM nos permite abandonar una macro antes de haberse concluido la lectura de todas las sentencias. Las instrucciones entre MACRO y ENDM comprenden el cuerpo de la definición de la macro. con él podemos invocar al macro. El número máximo de parámetros deberán caber en una línea..

1. Reducen el código 2. Hacen grande el código fuente. Sintaxis: PUBLIC nombre [. nombre] Donde nombre: Es el nombre de una variable. y Si esta creando o experimentando con un programa. Al ensamblar y enlazar varios módulos para formar un solo archivo . Si el símbolo se declara público. Un procedimiento no puede recibir parámetros. 1. Desventajas de los PROCEDIMIENTOS. su nombre es asociado con su dirección de OFFSET en el archivo . los módulos que ya están trabajando. es conveniente dividirlo en módulos y ensamblar solo aquellos en los que tenemos todavía problemas. Ventajas de los PROCEDIMIENTOS. Hacen más legible un programa. pero el nombre y dirección no están disponibles para el enlazador. Este proceso ahorra tiempo y posibles errores al modificar involuntariamente módulos que ya están trabajando. Desventajas de las MACRO 1. 2. Macros y Librerías Directivas para programas que usan varios módulos. 3. Son rápidas porque se ejecutan en línea en un programa. Las macros pueden pasar y recibir parámetros. Es un poco más compleja su declaración. 1. 2. Sobre todo cuando un programa es grande. Durante el enlazado.Lenguaje Ensamblador Comparativa entre macros y procedimientos Ventajas de las MACROS. Los símbolos declarados dentro de un módulo son privados del módulo y no son conocidos en otra parte del programa a menos que así lo indiquemos usando la directiva PUBLIC. los símbolos en diferentes módulos pero con el mismo nombre son referenciados a la misma dirección. Seleccione un PROCEDIMIENTO para: y Si la rutina es larga. Instituto Tecnológico de la Laguna Pag.OBJ. Hacen más lenta la ejecución de un programa. los dejamos como archivos objeto (. Si la rutina es llamada muchas veces.EXE debemos tomar en cuenta algunas consideraciones básicas. Hacen más legible un programa. La directiva PUBLIC Se usa para declarar símbolos públicos de tal manera de permitir que ellos puedan ser accesados desde otros módulos. 6 .OBJ) y solo los enlazamos con aquellos que ya hemos corregido y ensamblado. 4. 3. Si un símbolo no es declarado como público el nombre del símbolo no se escribe al archivo objeto. El símbolo tiene el valor de su dirección de OFFSET durante el ensamblado. La estructura de una MACRO es simple. Uso de Procedimientos. etiqueta o constante numérica definida dentro del archivo presente. y Rutinas que no son llamadas frecuentemente. Sugerencias para el uso de macros y procedimientos Seleccione una MACRO para: y Rutinas cortas.

como éste es agregado al programa en tiempo de ensamble.. si un símbolo referenciado como PUBLIC en el módulo donde es declarado. se enviará el siguiente mensaje: UNRESOLVED EXTERNALS nombre del símbolo.. Si en el módulo no existe un segmento de datos. se va a dividir en dos módulos. uno se va a llamar ENSA34B y el otro. Para indicarle al ensamblador que están declarados en otro módulo. Sintaxis: EXTRN nombre:tipo [. debe darse tanto la trayectoria como el nombre del archivo. se deberá usar la directiva INCLUDE. Los símbolos declarados PUBLIC dentro de un módulo van a ser usados en otro archivo en el cual no se han declarado (ni pueden ser declarados). es conveniente hacer la declaración en el segmento de código donde los símbolos son utilizados. DWORD. Para seguir usando el macro imp_cad.Lenguaje Ensamblador Uso de Procedimientos. usamos la directiva EXTRN. Macros y Librerías La declaración PUBLIC puede ponerse en cualquier parte del archivo fuente. se llamará BINASIP. * * Para declarar datos usando EXTRN. ó PROC BYTE. La directiva EXTRN Se emplea cuando un símbolo es usado en un módulo y no es declarado en él. en el módulo donde es usado deberá ser referenciado como EXTRN. Si el enlazador no encontró la declaración de los símbolos manejados como EXTRN. 7 . Si el archivo se encuentra en el directorio actual se puede dar solo el nombre del archivo. el cual contiene el procedimiento UNO. A continuación un ejemplo Retomando el programa ENSA34. FWORD. FAR. si no. El tipo PROC representa el tipo por default para un procedimiento. sin embargo el ensamblador marca un error al no encontrar su declaración. QWORD ó TBYTE ABS El tipo ABS se usa para símbolos que representan números constantes declaradas con EQU. La directiva INCLUDE inserta código fuente desde un archivo específico al archivo fuente en donde la directiva es dada. Por lo anterior se concluye que. la declaración deberá hacerse en el segmento donde ellos son definidos. el tipo por default es definido al declarar el modelo de memoria utilizado. El tipo puede ser uno de los siguientes: Descripción Especificador de distancia Especificador de tamaño absoluto Tipos NEAR. Sintaxis: INCLUDE nom_arch Donde: nom_arch: Especifica un archivo existente el cual contiene sentencias válidas. El tipo deberá ser el mismo dado al símbolo en el módulo donde es declarado. * NEAR Es una etiqueta (semejante como procedimiento) deberá declararse en el segmento de código desde el cual los símbolos son utilizados. * FAR Es una etiqueta la cual puede ser declarada en cualquier parte del archivo fuente. deberá declararse uno para usar EXTRN y referenciar una variable no declarada. nombre:tipo]. Instituto Tecnológico de la Laguna Pag. WORD. Los símbolos absolutos pueden ser declarados en cualquier parte del archivo fuente.

/NOLOGO Suprime indicativo de LIB. estos módulos almacenan procedimientos. gets. clrscr. /IGNORECASE No considera Mayúsculas/Minúsculas.OBJ) a una biblioteca ya existente. son unidos al archivo ejecutable en el momento del enlace.OBJ separados.OBJ) ya compilados o ya ensamblados con anterioridad. Si no se proporciona extensión.LIB). la cual contiene dos o más módulos (. Si no existe se crea.OBJ). gotoxy Los módulos almacenados en las bibliotecas. -+ Reemplaza un módulo de la librería. 8 . comandos: Nos definen las acciones a realizar sobre la librería: + Suma un módulo a la librería. ejemplos de procedimientos almacenados en bibliotecas son los siguientes: y PASCAL + write.EXE /PAGESIZE:n Define el tamaño de página. /HELP Ayuda en pantalla.EXE) nos permite reunir en un solo archivo (. gotoxy y C + printf. Remplazar módulos de una biblioteca. normalmente con la extensión (. El manejador de bibliotecas nos permite las siguientes acciones sobre una librería: Crear un nuevo archivo de biblioteca.LIB) opciones: Son alternativas usadas en la modificación o creación de una librería. Una biblioteca o librería es un archivo. Instituto Tecnológico de la Laguna Pag. Sumar módulos (. readln + ord. los cuales realizan procesos específicos.LIB) módulos reubicables (. clrscr. /NOIGNORECASE Es sensible al tamaño. cprintf + scanf. fscanf + pow. writeln + read. con este tamaño la librería más grande es de 16*65535 = 1048560 bytes. se proveen mecanismos para que ciertas bibliotecas (normalmente las que contienen funciones o procedimientos de E/S y de uso común) sean llamadas de manera implícita al realizar el enlazado. En los lenguajes de alto nivel. los PROCEDIMIENTOS se escriben en módulos .EXE El manejador de bibliotecas (LIB. sqr.[lib_nuev]] [. macros. o en bibliotecas. Sacar módulos de una biblioteca como archivos (. Bibliotecas. Borra un módulo de la librería. /NOEXTDICITONARY No construye directorio. por default toma (.] Donde: lib_vieja: Es una librería ya existente a la que se le desea hacer modificaciones. abs. Macros y Librerías Los archivos INCLUDE normalmente contienen.Lenguaje Ensamblador Uso de Procedimientos.arch_list] [. después de unir los módulos reubicables declarados en la línea de comandos.OBJ) y y y y y Sintaxis: LIB lib_vieja [opciones] [comandos] [. los procedimientos que estamos utilizando en nuestro programa. La ventaja de una librería es que en el momento del enlace solo llama de la biblioteca. por definición es de 16 bytes. Estas son las siguientes: /?: Ayuda en línea. se encuentran en código máquina reubicable (OBJ). fprintf. Borrar módulos de una biblioteca. sqrt. LIB. constantes y definiciones.

Lenguaje Ensamblador * -* Uso de Procedimientos.OBJ un módulo y luego lo borra de la librería. Lib_nuev: Especifica un nuevo nombre para una librería. si se especifica un nuevo nombre. A continuación como ya se tienen los archivos . Instituto Tecnológico de la Laguna Pag. Copia a un archivo . milib. C:\USER>masm ensa34C. arch_list: Crea un archivo. Usando el Macro Assembler de Microsoft Para ensamblar cada módulo. usando la siguiente instrucción: C:\USER>lib milib +binasib1 +imp. 9 .OBJ se crea la librería MILIB.LIB. el comando LIB Cuando se LIB nunca destruye la librería original.OBJ un módulo de la librería. Macros y Librerías Copia a un archivo . especifica este campo.lst. desde la línea de comandos se usaron las siguientes instrucciones. la crea con dicho nombre y si no se especifica un nuevo nombre a la librería original. el cual contiene los nombres y símbolos públicos almacenados en la librería. y para el archivo LIB. por omisión es el de lib_vieja. C:\USER>masm binasib1.EXE se tiene considerado su localización en dicho PATH. considerando el prompt como: C:\USER> C:\USER>masm imp. Nota: Se considera que ya hay un PATH definido. le cambia la extensión por BAK.

PB0. Las configuraciones de modos son muy flexibles y se acomodan a casi todas las necesidades posibles. programable.. CONEXIONES DEL 8255 .PC7: Puerto C: puerto de entrada/salida de 8 bits. B y C) son colocados en modo entrada. .D7: Bus de datos bidireccional de 3 estados.PA0. El 8255 está dividido en dos grupos internos: el grupo A.. 10 . Instituto Tecnológico de la Laguna Pag. . .PB7: Puerto B: puerto de entrada/salida de 8 bits. ...D0. el puerto C está dividido en dos mitades relacionadas con el puerto A y el B. capaz de controlar 24 líneas con diferentes configuraciones (entrada/salida) y en hasta 3 modos de operación. El puerto C está especialmente diseñado para ser dividido en dos mitades y servir de apoyo a los puertos A y B en algunos sistemas. La configuración por defecto de los tres puertos están configurados de en modo de entrada. Todos los registros de salida son reseteados ante un cambio de modo.PC0. Esta configuración puede ser alterada por el programador dependiendo los usos que le den. incluyendo los biestables de estado. formado por el puerto A y los 4 bits más significativos del puerto C. B y C.A0. y el grupo B. . Macros y Librerías INTERFAZ PROGRAMABLE DE PERIFERICOS (PPI) 8255 El PPI 8255 es un dispositivo de E/S general.WR: Utilizada por la CPU para enviar palabras de control o datos al 8255.. El modo para el puerto A y B se puede seleccionar por separado.RESET: Esta señal borra el registro de control y todos los puertos (A. el modo 1 (entrada y salida con señales de control) y el modo 2 (bus bidireccional de comunicaciones). DESCRIPCION DE SU FUNCIONAMIENTO Las dos líneas de direcciones definen cuatro puertos de E/S en el ordenador: los tres primeros permiten acceder a los puertos A. .PA7: Puerto A: puerto de entrada/salida de 8 bits. y las 24 lineas están configurados en ³1´.A1: Líneas de dirección: permiten seleccionar uno de los tres puertos o el registro de control. El 8255 soporta 3 modos de operación: el modo 0 (entrada y salida básica). .Lenguaje Ensamblador Uso de Procedimientos. el cuarto sirve para leer o escribir la palabra de control.RD: Utilizada por la CPU para leer información de estado o datos procedentes del 8255. constituido por el puerto B junto a los 4 bits menos significativos del puerto C.

. siendo el flujo regulado de nuevo por señales de control a través del puerto C.. Tanto si se configura de entrada como de salida. Puerto B (61h) Bit 0 (PC/XT: conectado a la línea GATE del contador 2 del 8253). y Si el bit 2 del puerto B (PC) o el bit 3 del puerto B (XT) están a 1: y En los PC: bits 0. tanto en PC como en XT sirve además para enviar una señal de reconocimiento al teclado). con posibilidad de generar interrupciones a la CPU en el momento en que los datos son recibidos o hay que enviar uno nuevo (consúltese documentación técnica). Existen dos grupos (A y B) formados por los puertos A y B más el puerto C. entonces el puerto A devuelve información sobre la configuración del sistema en los PC (no en los XT): en el bit 0 (a 1 si hay disqueteras). bit 7 (1 si comprobar error de paridad).7 (número de unidades de disco.. Este modo sólo puede operar en el Grupo A. Con este modo es factible conectar dos 8255 entre sí para realizar transferencias de datos en paralelo a una velocidad considerable.1 tipo de pantalla (11 MDA. y En PC/XT: los bits 4. 10 Color 80x25. bit 4 (PC/XT: a 0 para activar la RAM).3 (nº de disqueteras menos 1). bits 2. Si el bit 7 del puerto B está a 0.3 (bancos de RAM en placa base). bit 3 (en XT: selecciona contenido del puerto C. y En los XT: bit 1 (activo si coprocesador instalado). Los puertos pueden ser configurados de entrada (sin latch) o salida (los datos permanecen memorizados en un latch).. y En PC/XT: bit 5 (OUT del contador 2 del 8253). bits 2.3 parte alta del segundo banco de conmutadores de configuración (no usada). bits 2. MODO 1 Este modo es el strobed input/output (entrada/salida a través de un protocolo de señales). Instituto Tecnológico de la Laguna Pag. los datos permanecen en un latch.3 (número de bloques de 16 kb de memoria ¡que obsoleto e inútil!). 01 color 40x25).Lenguaje Ensamblador MODOS DE OPERACIÓN DEL 8255 Uso de Procedimientos. que luego puede ser leído desde la interrupción del teclado.. Puerto C (62h) Si el bit 2 del puerto B (PC) o el bit 3 del puerto B (XT) están a 1: y En los PC: los bits 0. en PC: a 0 para activar el motor del casete).. 11 . bit 1 (PC/XT: conectado al altavoz). bit 6 (PC/XT: a 1 activa la señal de reloj del teclado).3: mitad inferior del 2º banco de conmutadores de la placa base (RAM en slots de expansión). bits 4.. NOTA: Existen varias combinaciones posibles de estos modos.5 (tipo de pantalla: 11 MDA..7 están igual que en el caso anterior (no dependen del bit 2 ó 3 del puerto B).. que es repartido a la mitad entre ambos grupos para gestionar las señales de control. bit 2 (sólo PC: selecciona el contenido del puerto C). bit 5 (PC/XT: a 0 para activar señales de error en el slot de expansión). los datos son leídos y escritos sin más. si el bit 0=1). Tanto las entradas como salidas son almacenadas en latch. sin ningún tipo de control adicional. bit 4 (entrada de casete). bit 7 (en PC: empleado para seleccionar la función del puerto A. 10 color 80x25. bit 6 (a 1 si comprobar errores en slots de expansión). quedando las líneas de control fuera del área de influencia de los comandos que afectan a las restantes. DESCRIPCION DE LOS PUERTOS Puerto A (60h) Tiene una doble función: cuando el bit 7 del puerto B está a 1. 01 Color 40x25) y bits 6. y En los XT: bits 0. Macros y Librerías MODO 0 Esta configuración implementa simples funciones de entrada/salida para cada bit de los 2 puertos de 8 bits y los 2 puertos de 4 bits. MODO 2 En este modo se constituye un bus bidireccional de 8 bits. en las que las líneas del puerto C que no son empleadas como señales de control pueden actuar como entradas o salidas normales. el puerto A recibe el código de rastreo de la tecla pulsada. por el que los datos pueden ir en un sentido o en otro.

En este capítulo. este registro sólo puede ser escrito (se puede obtener información de estado.. D7. OUT 2: Salida del contador 2. GATE 0: Puerta de entrada al contador 0. escribir siempre primero la palabra de control. generador de onda cuadrada. Por otro. OUT 1: Salida del contador 1. enviar sólo byte alto. CLK 2: CLOCK 2. entrada de reloj al contador 0. Este circuito integrado posee 3 contadores totalmente independientes. Basta con tener en cuenta dos cosas: por un lado. OPERACIONES DE ESCRITURA El 8254 es muy flexible a la hora de ser programado. algo más potente que el 8253 de los PC/XT. RD: Permite al 8254 enviar datos a la CPU. CS: Habilita la comunicación con la CPU. CLK 1: CLOCK 1. sin embargo. La lógica de lectura y escritura acepta entradas del bus y genera señales de control para las partes funcionales del 8254. que pueden ser programados de 6 formas diferentes. El registro de la palabra de control es seleccionado Cuando A0=A1=1. las pocas diferencias serán comentadas cuando llegue el caso. etc. entrada de reloj al contador 1. Las líneas A0. con el comando read-back del 8254.D0: BUS de datos bidireccional de 3 estados. Esto significa que. para poder leerlos o escribirlos. antes de enviar la cuenta inicial al contador. OUT 0: Salida del contador 0. GATE 1: Puerta de entrada al contador 1. GATE 2: Puerta de entrada al contador 2. de 8 bits y tres estados. contador de sucesos. no hay que seguir un orden especial a la hora de programar los contadores. WR: Permite al 8254 aceptar datos de la CPU. A0. por ejemplo. entrada de reloj al contador 2.A2 seleccionan uno de los tres contadores o el registro de la palabra de control. El buffer del bus de datos.Lenguaje Ensamblador Uso de Procedimientos. por lo que sólo se describirá uno. no disponible en el 8253).A1: Líneas de dirección para seleccionar uno de los tres contadores o el registro de la palabra de control. son totalmente independientes y cada uno de ellos puede ser programado en una modalidad diferente. generador de ritmo programable. Los contadores 1. como se verá más adelante. 12 . dicha cuenta inicial debe seguir exactamente el formato seleccionado en la palabra de control (enviar sólo byte bajo. 2 y 3 son idénticos en su funcionamiento. Macros y Librerías EL TEMPORIZADOR 8253 U 8254 El 8253/4 es un chip temporizador que puede ser empleado como reloj de tiempo real.. la información vertida estará relacionada con el 8254 que equipa a los AT. se puede enviar la palabra de control de cada contador Instituto Tecnológico de la Laguna Pag. o bien enviar ambos consecutivamente).. comunica el 8254 con la CPU. Teniendo en cuenta que cada contador tiene su propio puerto y que la palabra de control indica el contador al que está asociada. CLK 0: CLOCK 0.

después la parte baja de la cuenta para el contador 0. luego la parte baja de la cuenta para el contador 1. .. OUT se pondrá en alto tras N pulsos del reloj (y no N+1 en este caso).) por lo que lecturas posteriores del mismo devuelven valores pseudoaleatorios. GATE no influye directamente en OUT. Si se programa el contador para leer/escribir la cuenta como dos bytes consecutivos (bajo y alto). el contador sería recargado con el nuevo valor. el contador vuelve a ser recargado si se produce un nuevo flanco de subida de GATE. Tras escribir la cuenta inicial y la palabra de control en el contador. la cuenta inicial será cargada en el próximo pulso del reloj conectado (CLK). Entonces. Si se escribe una nueva cuenta mientras GATE=0.). el One-Shot en curso no resulta afectado. el contador está preparado. también es válida cualquier combinación intermedia de estas secuencias (por ejemplo: enviar la palabra de control para el contador 0. Un nuevo valor de cuenta inicial puede ser almacenado en un contador en cualquier momento. sin afectar a OUT. sin que ello afecte al modo en que ha sido programado (el resultado de esta operación dependerá del modo. ésta será cargada en cualquier caso en el siguiente pulso del reloj: cuando GATE suba. Si se escribe una nueva cuenta en el contador. la cuenta será cargada en el siguiente pulso del reloj. El pulso One-Shot puede repetirse sin necesidad de recargar el contador con el mismo valor. Un flanco de subida de GATE provoca la carga del contador (CR -< CE) y que OUT baje en el próximo pulso del reloj. permaneciendo en bajo hasta que el contador alcance el cero. si se envía una cuenta de dos bytes. después la palabra de control para el contador 1. de ahí que OUT permanezca en bajo durante N pulsos de reloj tras la última vez que suceda esto. La entrada GATE puesta a 0 permite inhibir la cuenta. será cargada en el próximo pulso del reloj y el contador comenzará a decrementarse. sólo disponible en el 8254 (y no en el 8253). lo que daría un resultado incorrecto. OUT permanecerá a 0 durante N+1 pulsos del reloj tras escribir la cuenta inicial.. que se produzca un nuevo flanco de subida de GATE: en ese caso. El tercer método consiste en el comando de enclavamiento. pulso que no decrementa el contador: para una cuenta inicial N. OUT sube y permanece activo hasta el pulso del reloj que siga al próximo flanco de subida de GATE. OUT está inicialmente en estado bajo. la parte alta de la cuenta para el contador 0. Tras escribir la palabra de control. Esto permite sincronizar la secuencia de conteo por software. comenzando el pulso OneShot de N ciclos de reloj de duración. como luego veremos. Es empleado típicamente para contar sucesos. MODO 1: Hardware Retriggerable One-Shot (Monoestable programable). Tras escribir la palabra de control y la cuenta inicial.Lenguaje Ensamblador Uso de Procedimientos. El primero es el comando Read-Back. El segundo consiste en leer simplemente el contador accediendo a su puerto correspondiente: este método requiere inhibir la entrada CLK al contador (por ejemplo. Si se escribe una nueva cuenta durante un pulso One-Shot. El contador sigue evolucionando tras llegar a cero (0FFFFh. etc. OPERACIONES DE LECTURA Existen tres posibles métodos para leer el valor de un contador en el 8254... Macros y Librerías seguida de su cuenta inicial. a través de la línea GATE o utilizando circuitería exterior de apoyo) con objeto de evitar leer la cuenta en medio de un proceso de actualización de la misma. como se verá más adelante). a menos. y permanecerá así hasta que el contador alcance el cero: entonces se pone a 1 y no volverá a bajar hasta que se escriba una nueva cuenta o una nueva palabra de control. 13 . o bien enviar todas las palabras de control para los 3 contadores y después las 3 cuentas iniciales. Instituto Tecnológico de la Laguna Pag. OUT será inicialmente alta y bajará en el pulso de reloj que sigue al flanco de subida de GATE. 0FFFEh. el primer byte enviado inhibe la cuenta y OUT es puesto a cero inmediatamente (sin esperar a CLK): tras escribir el segundo byte. el sentido común indica que entre ambos envíos/recepciones no conviene transferir el control a una subrutina que utilice ese mismo contador para evitar un resultado incorrecto. MODOS DE OPERACIÓN DEL 8253 Ò 8254 MODO 0: Interrupt On Terminal Count (Interrupción al final de la cuenta). lógicamente.

si se recibe un flanco de subida de GATE antes del final del período el contador se recargará con ese nuevo valor de cuenta inicial tras el próximo pulso del reloj y volverá a comenzar. tras ello. periódico. Cuando llega a cero. OUT baja durante un pulso de reloj y luego vuelve a subir. el contador comienza a decrementar la cuenta. MODO 5: Hardware Triggered Strobe (Pulso Strobe iniciado por hardware). Cuando el contador se decremente hasta el valor 1. Escribir un nuevo valor de cuenta durante el funcionamiento del contador no afecta a la actual secuencia de cuenta. OUT no bajará hasta N+1 pulsos de CLK. Este pulso CLK no decrementa el contador: por ello. Escribir un nuevo valor de cuenta durante el funcionamiento del contador no afecta a la actual secuencia de cuenta. pero al pasar la mitad de la cuenta pasa a estado bajo hasta que la cuenta finaliza. GATE no afecta a OUT. Para una cuenta inicial N. El proceso se inicia cuando se escribe la cuenta inicial. Después de escribir la palabra de control y la cuenta inicial. se cargará en el próximo pulso CLK y continuará el proceso de cuenta con la nueva cuenta escrita. Tras escribir la palabra de control y la cuenta inicial. Si GATE=0 la cuenta descendiente se detiene: si GATE es bajado durante un pulso de salida. volverá a subir y el contador se recargará con la cuenta inicial. OUT sube inmediatamente sin esperar ningún CLK. OUT estará inicialmente en alto. Este modo es también periódico: la onda resultante para una cuenta inicial N tiene un período de N ciclos. Este modo es similar al 2. GATE no influye en OUT. Este modo es empleado normalmente para la generación de una señal de onda cuadrada. si la cuenta es de 2 bytes. OUT está en alto al principio. OUT sube inmediatamente. en caso contrario se recargará con el nuevo valor tras finalizar con normalidad el medio-ciclo en curso. Para valores de cuenta impares. al escribir el primero no se altera el funcionamiento del contador hasta que se envíe el segundo. Un flanco de subida en GATE provoca una recarga del contador con el valor de cuenta inicial en el siguiente pulso del reloj: GATE puede ser utilizado para sincronizar el contador. Un flanco de subida en GATE provoca una recarga del contador con el valor de cuenta inicial en el siguiente pulso del reloj (después. la secuencia se repite cada N ciclos de reloj (CLK).Lenguaje Ensamblador Uso de Procedimientos. si se recibe un flanco de subida de GATE antes del final del medio-período el contador se recargará con ese nuevo valor de cuenta inicial tras el próximo pulso del reloj y volverá a comenzar. el contador será cargado en el próximo pulso del reloj: como ese pulso no decrementa el contador. cuando la cuenta inicial expira. y la misma secuencia se repite indefinidamente. 14 . el contador será cargado en el próximo pulso del reloj: OUT bajará N pulsos de reloj después. Si se escribe una nueva cuenta durante el proceso. el contador será cargado en el próximo pulso del reloj: también puede ser sincronizado por software. con la diferencia de que la salida OUT conmuta al transcurrir la mitad de la cuenta: inicialmente está en alto. En este modo. MODO 3: Square Wave Mode (Generador de onda cuadrada). ante una cuenta inicial N. OUT bajará tras los N pulsos del reloj correspondientes): GATE puede ser utilizado para sincronizar el contador. Macros y Librerías MODO 2: Rate Generator (Generador de ritmo). OUT estará en alto al principio: con el flanco de subida de la señal GATE. Si GATE=0 la cuenta descendiente se detiene: si GATE es bajado durante un pulso de salida. en caso contrario se recargará con el nuevo valor tras finalizar con normalidad el ciclo en curso. OUT baja durante un pulso CLK y luego vuelve a subir. MODO 4: Software Triggered Mode (Pulso Strobe iniciado por software). Instituto Tecnológico de la Laguna Pag. GATE=0 inhibe el contador y GATE=1 lo habilita. lo que permite también una sincronización por software. OUT pasará a estado bajo durante un pulso del reloj. Tras escribir la palabra de control y la cuenta inicial. Tras escribir la palabra de control y la cuenta inicial. el contador funciona como un divisor por N. Es empleado típicamente para las interrupciones de los relojes de tiempo real. repitiéndose el proceso. como cabría esperar. Este modo es. el contador no será cargado hasta el pulso de reloj posterior al flanco de subida de GATE. OUT no bajará hasta que pasen N+1 pulsos de reloj. para una cuanta inicial N. la duración a nivel alto de OUT será un período de reloj mayor que la duración a nivel bajo. por tanto.

es preciso habilitar la puerta GATE activando el bit 0 del puerto 61h. valor que determina la precisión del reloj del sistema. en el contador 2 es seleccionable el nivel de la línea GATE a través de bit 0 del puerto E/S 61h. llamando a la vieja INT 8 cada 1/18. Para emplearlo en las temporizaciones. Macros y Librerías Si una nueva cuenta inicial es escrita durante el proceso. La BIOS programa por defecto el contador 0 en el modo 3 (generador de onda cuadrada) y el contador 1 en el modo 2 (generador de ritmo). con el riesgo -eso sí.00000001b JMP SHORT $+2 OUT 61h. lo que suele dar quebraderos de cabeza a la hora de producir sonido. especialmente este último. 15 .536 = 18. detectado por los chips de paridad -si los hay-.2 interrupciones/segundo. no es conveniente alterar esta especificación porque.2 veces por segundo. los PC/XT van equipados con un 8253. acelerándose en ocasiones hasta casi un 10% la velocidad de proceso del equipo. alternativamente puede emplearse para temporizar. La señal GATE de los contadores 0 y 1 está siempre a 1.Lenguaje Ensamblador Uso de Procedimientos. que provoca generalmente el bloqueo del equipo. activar bit 0 (línea GATE del contador 2) . la actual secuencia del contador no será alterada. el usuario normalmente programa el contador 2 en el modo 2 ó 3. TEMPORIZACION Los contadores 0 y 1. también hay que asegurarse de que la salida del contador no está conectada al altavoz (a menos que se desee música mientras se cronometra) poniendo a 0 el bit 1 del mismo puerto (61h): IN AL. estado de espera para E/S Instituto Tecnológico de la Laguna Pag. si bien no lo consideraremos aquí. ciertamente demasiado baja. su valor normal para el divisor es 18. De todas maneras.2 segundos para no alterar el funcionamiento normal del ordenador. el contador será cargado con la nueva cuenta en el próximo pulso del reloj. ya están ocupados por el sistema.de un fallo en la memoria. en los PC/XT se puede aumentar entre 19 y 1000 sin demasiados riesgos. La salida del contador 2 puede estar conectado al altavoz del ordenador para producir sonido.180/65. aumentándolo se puede acelerar el funcionamiento del ordenador. los PS/2 más avanzados tienen un temporizador con un cuarto contador ligado a la interrupción no enmascarable.61h AND AL. hay un método para realizar retardos (empleado por la BIOS y algunas aplicaciones) que se vería afectado. Es el único contador que queda realmente libre para el usuario. la palabra de control se envía al puerto 43h. La salida del contador 1 controla el refresco de memoria en todas las máquinas. borrar bit 1 (conexión contador 2 con el altavoz) . a través de los puertos 40h. como se verá más adelante. algo menos versátil. Todos los contadores van conectados a un reloj que oscila a una frecuencia de 1. 41h y 42h. Se puede modificar el valor de recarga de este contador en un programa. por lo que la cadencia de los pulsos es de 1.11111101b OR AL. Este contador ha sido conectado con el doble propósito de temporizar y de generar sonido. que a su vez invoca a INT 1Ch). En los AT la ganancia de velocidad es mucho menor y además este es un punto demasiado sensible que conviene no tocar para no correr riesgos. los tres contadores son accedidos.AL .2 Mhz).193.193.180 ciclos por segundo (casi 1. en la práctica el único disponible es el 2. Sin embargo. respectivamente. aunque se podría bajar hasta un valor 2-17 para ralentizar el sistema. si bien no es conveniente instalar programas residentes que cambien permanentemente esta especificación: los programas del usuario esperan encontrarse el temporizador a la habitual y poco útil frecuencia de 18. este contador está programado por defecto con el valor cero (equivalente a 65536). La salida del contador 0 está conectada a IRQ 0 (ligado a la INT 8. Por tanto. EL 8254 EN LA PC Todos los AT y PS/2 llevan instalado un 8254 o algo equivalente. La dirección base en el espacio de E/S del ordenador elegida por IBM cuando diseñó el PC es la 40h. si se produce un flanco de subida en GATE antes de que la nueva cuenta sea escrita pero después de que expire la cuenta actual.

AL . constante de retardo retardo: LOOP retardo POP CX LOOP otro_ciclo STI CONTROL DEL ALTAVOZ MEDIANTE EL TEMPORIZADOR El otro método posible consiste en emplear el contador 2 del temporizador conectado al altavoz.300 . entre otras IN AL. una vez más. control sobre el volumen.61h XOR AL.AL MOV CX. Macros y Librerías La producción de sonido es uno de los puntos más débiles de las computadoras compatibles. Esto es particularmente grave y evidente cuando las temporizaciones se hacen con ciclos de retardo con registros de la CPU: la frecuencia del sonido está totalmente ligado a de la velocidad de la máquina en que se produce. Uso de Procedimientos. que dada la calidad del altavoz también está en función de la frecuencia. que sólo superan por muy escaso margen a alguno de los micros legendarios de los 80. Este método de producción de sonido tiene varios inconvenientes. Por fortuna. bajar GATE del contador 2 del 8254 MOV CX. la baja calidad del altavoz del PC redondea la onda cuadrada y produce un sonido algo más musical de forma involuntaria. está a menudo más o menos ligada a la capacidad de proceso de la computadora: esto significa que el sonido es más grave en máquinas lentas y más agudo en las rápidas. Si se hace cambiar este bit (manteniéndolo durante cierto tiempo alto y durante cierto tiempo bajo. con la utilización del 8254 o sin él. como veremos). el temporizador es el encargado de producir el sonido (este es el segundo método. enviando el período del sonido (1. Al final. Ahora no es preciso inhibir las interrupciones para garantizar la calidad del sonido: Instituto Tecnológico de la Laguna Pag. conviene borrar ambos bits de nuevo. repitiendo el proceso a gran velocidad) se puede generar una onda cuadrada de sonido. si bien las tarjetas de sonido han solventado el problema. dependiente de la máquina) ya que el contador 2 está ahora ocupado en la producción de sonido y no se puede usar para temporizar (al menos. Es por ello que el pitido de error que produce el teclado es a menudo distinto entre computadoras. no sin hacer malabarismos). ya que cuando está en alto y se activa también el bit 1 del puerto E/S 61h. la frecuencia con que se hace vibrar al bit que lo produce. Para emplear este sistema. primero se prepara el contador 2 para temporizar (poniendo a 1 el bit 0 del puerto 61h) y luego se conecta su salida al altavoz (poniendo a 1 el bit 1 del puerto 61h). evitar posible INT 8. Cuanto más deprisa se realice el proceso. Existe el pequeño problema de que la duración del sonido ha de ser múltiplo de 1/18. CONTROL DIRECTO DEL ALTAVOZ El altavoz del ordenador está ligado en todas las máquinas al bit 1 del puerto E/S 61h. 256 vueltas otro_ciclo: PUSH CX IN AL. es preciso poner primero a cero el bit 0 del mismo puerto (61h): CLI . así.193. mayor será la frecuencia del sonido. invertir bit 1 JMP SHORT $+2 OUT 61h. aunque tengan el mismo teclado instalado. se podría evaluar la velocidad de la CPU para ajustar las constantes de retardo o aumentar la velocidad de la interrupción periódica.180/frecuencia en Hz) a dicho contador (programado en modo 3). No existe. En todos los PCs existen dos métodos diferentes para generar sonido. Pero aquí nos conformaremos con describir la programación del altavoz. Esto permite obtener sonidos idénticos en todos los ordenadores. en cualquier caso.2 segundos si se desea utilizar el reloj del sistema para determinarla (un bucle de retardo sería. estado de espera para E/S OUT 61h.61h AND AL.2 . Alternativamente. que veremos por separado. 16 . Antes de comenzar a producir el sonido con este método hay que bajar la línea GATE del 8254.Lenguaje Ensamblador SÍNTESIS DE SONIDO. si no se tiene mucho cuidado.100h . Por un lado. Por tanto. éste se encarga de generar el sonido.11111110b JMP SHORT $+2 .

----------------. 61H <-AND AL.Lenguaje Ensamblador Este diseño esta aplicado en el .Macro IniciarBocina--------------iniBoc macro IN AL. 61H <-OR AL. AL <-endm Uso de Procedimientos. Macros y Librerías Las frecuencias en Hz de las distintas notas musicales están oficialmente definidas y los músicos suelen tenerlas en cuenta a la hora de afinar los instrumentos. 17 . 00000011B <--OUT 61H.Macro FinalizarBocina--------------finBoc macro IN AL. adoptada por la American Standards Asociation en 1936 Instituto Tecnológico de la Laguna Pag. La escala cromática temperada. 11111100B <--OUT 61H.----------------. AL <-Endm .

1 int 21h sub al. En este programa se hace uso del altavoz de la computadora.Apagamos la bocina mediante la macro . ss:pila. datos mov ds. include bocina.Segmento de PILA pila segment para stack 'stack' db 64 dup (?) pila ends . y si el código ingresado es correcto imprime en pantalla un mensaje sobre el programa y el nombre de los integrantes del equipo. " Antonio Vela".Lenguaje Ensamblador Uso de Procedimientos. Código. la cual emite un sonido con cierta frecuencia si la clave de acceso que se le está solicitando es incorrecta. Este programa fue realizado utilizando algunos procedimientos y algunas macros.Finaliza la bocina si es que está habilitada tras un nuevo intento.Dígitos del 0 al 9 mal db "***Acceso Denegado***$" cont dw 3 archivo db "Exposicion hecha por Equipo 1 de ensamblador ".36 nhex dw 0 msge db "Teclea tu NIP:$" . .0000 clear color call pedir call acomodo finBoc call acomodo call acomodo mov ah.Muestra el mensaje que pide al usuario el NIP .30h or byte ptr nhex. 2010h jne mala clear color imprimir archivo finBoc imprimir linea Instituto Tecnológico de la Laguna Pag.Accede al primer digito tecleado y lo acomoda .Segmento de CODIGO code segment para 'code' assume cs:code.mac . al imprimir linea imprimir linea cmp nhex. ds:datos inicio: mov ax. 10.mac include macros.Al ASCCI a(41h) conversión a hexa . 10.inicializamos la variable nhex en 0 . ax mov nhex.13. " Jose Juan Zamora" .13. 18 .Segmento de DATOS datos segment para public 'data' linea db 10. Macros y Librerías Desarrollo. 13. " Pedro Martínez $" datos ends .10. 10. 13.

.1 Int 21h sub al.finalizamos la aplicación después de 3 intentos fallidos. . 0 je fin color jmp inicio Fin: finBoc MOV AX.Lenguaje Ensamblador jmp fin mala: mov dx. ax cmp cont. Instituto Tecnológico de la Laguna Pag. Macros y Librerías .9 lea dx. 19 . 4C00H INT 21H . . al mov cl.imprimimos la cadena de acceso denegado .y lo guardara en al .30h or byte ptr nhex.Asignamos el índice del contador a intentos.Si numero intentos=0 salimos de la aplicación.se prepara cl para hacer una rotación de 4bits para acomodar los dígitos pulsados.se hace un or afectando nhex .4 rol nhex.PROCEDIMIENTOS pedir proc near .le mandamos una frecuencia 297 .Visualizar msge mov ah.pasamos 4 reglones. cl ret acomodo endp code ends end inicio .Leer el primer digito . . cont dec ax mov cont. msge Int 21h ret pedir endp acomodo proc near mov ah. Uso de Procedimientos. .La opción 1 de la Int 21 pedirá un carácter.restamos 30h para nivelar a nivel hexa de la maquina. 297 frecuencia dx iniBoc imprimir mal imprimir linea imprimir linea imprimir linea imprimir linea mov ax.

Macro Fecuencia--------------frecuencia MACRO BASE . 00000011B OUT 61H. AL ENDM . 00h mov bh.9 int 21h endm .mac .----------------. 00h mov dx. Esta macro es para sacar la base de MOV AX.mac .----------------. 61H OR AL. 07h mov al. BASE .-----------------Macro imprimir---------------imprimir macro cad lea dx. la bocina. AL endm .limpia la pantalla mov al.Macro colores--------------color macro mov ah.cad mov ah. la dirección del puerto OUT 42H. 20 .Macro limpiar--------------clear macro mov ah. 06h mov cx. 42h es donde esta conectada físicamente XCHG AL.----------------. AH .03h int 10h endm .Lenguaje Ensamblador Uso de Procedimientos.00h .Macro FinalizarBocina------------finBoc macro IN AL.Macro IniciarBocina--------------iniBoc macro IN AL.----------------. bocina. 4F50h int 10h endm Instituto Tecnológico de la Laguna Pag. AL . AL endm macros. Macros y Librerías MACROS. 61H AND AL.----------------. OUT 42H. a sonar la bocina. 11111100B OUT 61H.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->