Sie sind auf Seite 1von 20

Ingeniera en Sistemas Computacionales

LENGUAJE ENSAMBLADOR

Uso de Procedimientos, Macros o Libreras y uso del altavoz de la computadora

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

ndice Contenido pgs.

Introduccin .............................................................................................................................................................. 3 Interfaz programable de perifricos (ppi) 8255....................................................................................................... 10 Temporizador 8253 u 8254....................................................................................................................... 12 Desarrollo y cdigo................................................................................................................................................... 18 Conclusiones ............................................................................................................................................................ 21 Referencias .............................................................................................................................................................. 22

Instituto Tecnolgico de la Laguna

Pag. 2

Lenguaje Ensamblador Introduccin.

Uso de Procedimientos, Macros y Libreras

MODULARIZACION Y PROGRAMACIN HIBRIDA Introduccin. La programacin modular es uno de los mtodos de diseo mas flexibles y poderosos para el mejoramiento de la productividad de un programa. Usando la programacin modular el problema se divide en mdulos, donde cada una de los cuales ejecuta una nica actividad o tarea y se codifican independientemente de otros mdulos. Cada uno de estos mdulos se analiza, se codifica y se prueba de preferencia por separado. Al trabajar con lenguaje ensamblador, la necesidad de la estructuracin es, si cabe, an es ms vital, puesto que cualquier tarea, por sencilla que parezca, puede requerir una gran lista de sentencias ejecutables. No hay que olvidar que estamos trabajando a un nivel muy bajo, ms que cualquier otro lenguaje al que est acostumbrado. Todo programa contiene un mdulo denominado programa principal que controla todo lo que sucede; si se transfiere el control a un submdulo, ste ejecuta su funcin y una vez que la termina, regresa el control al mdulo desde donde fue llamado. En muchos casos es el mdulo principal. Si la tarea asignada a cada submdulo es demasiado compleja, ste deber descomponerse en otros mdulos ms pequeos. Este proceso de descomposicin contina hasta que cada mdulo tenga una tarea especfica que ejecutar. Esta tarea puede ser: a) Entrada. b) Salida. c) Manipulacin de datos. d) Control de otros mdulos. e) Alguna combinacin de los anteriores. En el Lenguaje ENSAMBLADOR esta tcnica se puede llevar a cabo mediante Macros y Procedimientos. Procedimientos. Los lenguajes de alto nivel, al menos la mayora de ellos, permite codificar bloques de sentencias a los que se asigna un nombre, de tal forma que para ejecutar dichas sentencias, desde cualquier punto de la aplicacin basta con introducir ese identificador y, en caso necesario, facilita los parmetros adecuados. A estos bloques de sentencias, dependiendo del lenguaje, se les conoce como procedimientos, funciones o mtodos, segn los casos. En ensamblador se opera con direcciones, a pesar de que stas pueden estar representadas mediante etiquetas que hacen ms fcil nuestro trabajo. La transferencia mgica de parmetros, por la que unos valores facilitados tras un identificador aparecen como argumentos del procedimiento invocado, es algo que no existe. S tenemos a nuestra disposicin, no obstante, una instruccin capaz de saltar a una direccin dada guardando el actual valor del registro IP, de tal forma que sta puede recuperarse posteriormente para volver y continuar la ejecucin por el punto en el que se interrumpi. La instruccin que nos permite invocar a un procedimiento es CALL. Esta toma como parmetro un valor inmediato, la direccin a la que debe transferir el control, o bien indirecto a travs de un registro o un campo que contendr la direccin a la que tiene que apuntar IP a partir de ese momento. Aparentemente CALL es similar a la instruccin JMP, ya que transfiere la ejecucin a una direccin de forma incondicional. La diferencia es que, antes de que se produzca ese salto, CALL guarda en la pila el valor actual del registro IP, en caso de que el salto sea una direccin dentro del mismo segmento que indica CS, o bien, los valores de CS e IP, si el salto es a una direccin de otro segmento. El primer tipo de salto se denomina NEAR o cercano, mientras que el segundo se le conoce como salto FAR o lejano. En el primero se necesitan 16 bits, tan slo la direccin 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. Una vez que se ha guardado el valor de IP o de CS e IP, se ejecutan las instrucciones que haya en la direccin indicada. Estas pueden efectuar, como es lgico, cualquier tarea, siempre que tengamos en cuenta que al llegar al final, justo antes de devolver el control, la pila debe encontrarse en la misma situacin en la que se encontraba al principio. Si hemos introducido valores, stos deben extraerse. Lo importante es que el puntero de la Instituto Tecnolgico de la Laguna Pag. 3

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

pila, en el momento de volver, est apuntando a los valores que introdujo en ella la instruccin CALL. Si la instruccin CALL guarda el actual puntero de instruccin y transfiere la ejecucin al procedimiento, la instruccin RET tiene el efecto inverso, recuperndose la direccin de la pila, devolvindola a CS e IP e incrementando ste ltimo para proceder a ejecutar la instruccin que sigue al CALL que invoc el procedimiento. La instruccin RET, por tanto, tambin es un salto incondicional, similar a JMP, con la diferencia de que la direccin a la que saltar debe estar almacenada en la pila, generalmente por una llamada previa a CALL. Teniendo en cuenta esto, entender lo importante que es que SS:SP conserven los valores que tenan al iniciar la ejecucin del procedimiento, porque, de no ser as, la instruccin RET podra transferir la ejecucin a un punto incorrecto y causar la cada del sistema. Cmo sabr la instruccin RET si debe recuperar de la pila slo el valor de IP o tambin el de CS? La respuesta es que depende de cmo se haya definido el procedimiento al que se invoc con CALL. MASM y TASM cuentan con un preprocesador que, a partir de ciertas palabras claves como PROC FAR o PROC NEAR, se encargan de generar las instrucciones ensamblador adecuadas. Sintaxis: etiqueta etiqueta Donde: etiqueta: constante: PROC [NEAR | FAR] secuencia de sentencias RET constante ENDP

Es un smbolo asignado como nombre al procedimiento, la distancia pude ser NEAR FAR, cualquier RET dentro del PROCEDIMIENTO automticamente toma la misma distancia. STACK se usa para pasar argumentos a un procedimiento, si se conoce el nmero de WORDS pasadas al STACK como argumentos, constante puede contener ese nmero, de tal forma de liberar esos argumentos despus de salir del procedimiento.

La etiqueta se usa para llamar al PROCEDIMIENTO con una instruccin CALL, entonces, la etiqueta contiene la direccin de inicio de la primera instruccin del procedimiento. Esta instruccin realiza su trabajo colocando en el STACK la direccin de la siguiente instruccin y transfiriendo el control a la direccin especificada por el operando. <para una llamada NEAR, SP es decrementado en dos y el offset es cargado en el STACK ; el nuevo offset es cargado en IP. Sintaxis: CALL etiqueta etiqueta: Macros. Para cada instruccin simblica que el programador codifica, en ensamblador, genera una instruccin en lenguaje mquina. Pero para cada enunciado codificado en un lenguaje de alto nivel, como C o Pascal, el compilador genera muchas instrucciones de lenguaje mquina. A este respecto, se puede pensar, en un lenguaje de alto nivel consistente de macro enunciados. El ensamblador tiene facilidades que el programador puede usar para definir macros. Es necesario definir un nombre especfico para la macro, junto con el conjunto de instrucciones en ensamblador que la macro va a generar. Despus, siempre que necesite codificar el conjunto de instrucciones, slo codifique el nombre de la macro y el ensamblador genera de manera automtica las instrucciones que el programador defini. Las macros son tiles para los siguientes propsitos: -Simplificar y reducir la cantidad de codificacin repetitiva. -Reducir errores causados por la codificacin repetitiva. -Linealizar un programa en ensamblador, para hacerlo ms legible. Para macros que se necesiten incluir en un programa, primero tiene que definirlas. Una definicin de macro aparece antes de cualquier definicin de segmento. La sintaxis de la macro es la siguiente: Instituto Tecnolgico de la Laguna Pag. 4

Es el nombre del procedimiento. Se transforma en la direccin del procedimiento.

Lenguaje Ensamblador nombre MACRO [parmetro [,parmetro]....] secuencia de sentencias. ENDM Donde: nombre: parmetros:

Uso de Procedimientos, Macros y Libreras

Deber ser nico, y reunir los requisitos de un smbolo, con l podemos invocar al macro. Son smbolos que actan como receptores de valores pasados como argumento a la MACRO cuando sta es llamada. El nmero mximo de parmetros debern caber en una lnea.

Examinaremos una definicin de macro sencilla que inicializa los registros de segmento para un programa .EXE INIZIALIZA MACRO MOV AX, @DATA MOV DS, AX MOV ES, AX ENDM El nombre de esta macro es INICIALIZA, aunque es aceptable cualquier otro nombre vlido que sea nico. La directiva MACRO en la primer lnea le indica al ensamblador que las instrucciones que siguen hasta ENDM (fin de la macro), son parte de la definicin de la macro. Las instrucciones entre MACRO y ENDM comprenden el cuerpo de la definicin de la macro. Los nombres a los que se hace referencia en la definicin de la macro, @DATA, AX,DS y ES, deben de estar definidos en alguna parte del programa o deben de ser dados a conocer de alguna otra forma al ensamblador. En forma subsecuente se puede utilizar la macroinstruccin INICIALIZA en el segmento de cdigo en donde se quiera inicializar los registros. Cuando el ensamblador encuentra la macro instruccin, busca en una tabla de instrucciones simblicas y, a falta de una entrada, busca macro instrucciones. Ya que el programa contiene una definicin de la macro INICIALIZA, el ensamblador sustituye el cuerpo de la definicin, generando las instrucciones: expansin de la macro. Un programa utilizara la macroinstruccin INICIALIZA una sola vez, aunque otras macros estn diseadas para ser utilizadas cualquier nmero de veces y cada vez que el ensamblador genere la misma expansin de la macro. Para hacer la macro ms flexible, se pueden definir parmetros en ella como argumentos mudos. La definicin de la macro siguiente llamada PROMPT, proporciona el uso de la funcin 09h del DOS para desplegar cualquier mensaje. PROMPT MACRO MENSAJE LEA AH, 09H LEA DX, MENSAJE INT 21H ENDM Cuando se usa la macroinstruccin, el programador debe proporcionar el nombre del mensaje, el cual hace referencia en el segmento de datos terminada por un signo de pesos ($). Un argumento mudo, en una definicin de una macro, indica al ensamblador que haga coincidir su parmetro con cualquier aparicin del mismo parmetro en el cuerpo de la macro. Por ejemplo, el argumento mudo MNESAJE tambin aparece en la instruccin LEA. Algunas macros necesitan que se definan elementos de datos y etiquetas de instrucciones dentro de la definicin de la macro. Si utiliza la macro ms de una vez en el mismo programa y el ensamblador define los elementos de datos para cada aparicin, los nombres duplicados haran que el ensamblador generar un mensaje de error. Para asegurar que cada nombre generado sea nico, codifique la directiva LOCAL inmediatamente despus de la instruccin macro. La directiva EXITM nos permite abandonar una macro antes de haberse concluido la lectura de todas las sentencias.

Instituto Tecnolgico de la Laguna

Pag. 5

Lenguaje Ensamblador Comparativa entre macros y procedimientos Ventajas de las MACROS. 1. Son rpidas porque se ejecutan en lnea en un programa. 2. Las macros pueden pasar y recibir parmetros. 3. La estructura de una MACRO es simple. 4. Hacen ms legible un programa. Desventajas de las MACRO 1. Hacen grande el cdigo fuente. Ventajas de los PROCEDIMIENTOS. 1. Reducen el cdigo 2. Hacen ms legible un programa. Desventajas de los PROCEDIMIENTOS. 1. Hacen ms lenta la ejecucin de un programa. 2. Es un poco ms compleja su declaracin. 3. Un procedimiento no puede recibir parmetros. Sugerencias para el uso de macros y procedimientos Seleccione una MACRO para: y Rutinas cortas. y Rutinas que no son llamadas frecuentemente. y Si esta creando o experimentando con un programa. Seleccione un PROCEDIMIENTO para: y Si la rutina es larga. Si la rutina es llamada muchas veces.

Uso de Procedimientos, Macros y Libreras

Directivas para programas que usan varios mdulos. Sobre todo cuando un programa es grande, es conveniente dividirlo en mdulos y ensamblar solo aquellos en los que tenemos todava problemas, los mdulos que ya estn trabajando, los dejamos como archivos objeto (.OBJ) y solo los enlazamos con aquellos que ya hemos corregido y ensamblado. Este proceso ahorra tiempo y posibles errores al modificar involuntariamente mdulos que ya estn trabajando. Al ensamblar y enlazar varios mdulos para formar un solo archivo .EXE debemos tomar en cuenta algunas consideraciones bsicas. Los smbolos declarados dentro de un mdulo son privados del mdulo y no son conocidos en otra parte del programa a menos que as lo indiquemos usando la directiva PUBLIC. La directiva PUBLIC Se usa para declarar smbolos pblicos de tal manera de permitir que ellos puedan ser accesados desde otros mdulos. Si un smbolo no es declarado como pblico el nombre del smbolo no se escribe al archivo objeto. El smbolo tiene el valor de su direccin de OFFSET durante el ensamblado, pero el nombre y direccin no estn disponibles para el enlazador. Si el smbolo se declara pblico, su nombre es asociado con su direccin de OFFSET en el archivo .OBJ. Durante el enlazado, los smbolos en diferentes mdulos pero con el mismo nombre son referenciados a la misma direccin. Sintaxis: PUBLIC nombre [, nombre] Donde nombre: Es el nombre de una variable, etiqueta o constante numrica definida dentro del archivo presente.
Instituto Tecnolgico de la Laguna Pag. 6

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

La declaracin PUBLIC puede ponerse en cualquier parte del archivo fuente. Los smbolos declarados PUBLIC dentro de un mdulo van a ser usados en otro archivo en el cual no se han declarado (ni pueden ser declarados), sin embargo el ensamblador marca un error al no encontrar su declaracin. Para indicarle al ensamblador que estn declarados en otro mdulo, usamos la directiva EXTRN. Si el enlazador no encontr la declaracin de los smbolos manejados como EXTRN, se enviar el siguiente mensaje: UNRESOLVED EXTERNALS nombre del smbolo. Por lo anterior se concluye que, si un smbolo referenciado como PUBLIC en el mdulo donde es declarado, en el mdulo donde es usado deber ser referenciado como EXTRN. La directiva EXTRN Se emplea cuando un smbolo es usado en un mdulo y no es declarado en l. Sintaxis: EXTRN nombre:tipo [, nombre:tipo]... El tipo deber ser el mismo dado al smbolo en el mdulo donde es declarado. El tipo puede ser uno de los siguientes:

Descripcin Especificador de distancia Especificador de tamao absoluto

Tipos NEAR, FAR, PROC BYTE, WORD, DWORD, FWORD, QWORD TBYTE ABS

El tipo ABS se usa para smbolos que representan nmeros constantes declaradas con EQU. El tipo PROC representa el tipo por default para un procedimiento, el tipo por default es definido al declarar el modelo de memoria utilizado. * NEAR Es una etiqueta (semejante como procedimiento) deber declararse en el segmento de cdigo desde el cual los smbolos son utilizados. * FAR Es una etiqueta la cual puede ser declarada en cualquier parte del archivo fuente, es conveniente hacer la declaracin en el segmento de cdigo donde los smbolos son utilizados. * * Para declarar datos usando EXTRN, la declaracin deber hacerse en el segmento donde ellos son definidos. Si en el mdulo no existe un segmento de datos, deber declararse uno para usar EXTRN y referenciar una variable no declarada. Los smbolos absolutos pueden ser declarados en cualquier parte del archivo fuente.

A continuacin un ejemplo Retomando el programa ENSA34, se va a dividir en dos mdulos, uno se va a llamar ENSA34B y el otro, el cual contiene el procedimiento UNO, se llamar BINASIP. Para seguir usando el macro imp_cad, como ste es agregado al programa en tiempo de ensamble, se deber usar la directiva INCLUDE. La directiva INCLUDE inserta cdigo fuente desde un archivo especfico al archivo fuente en donde la directiva es dada. Sintaxis: INCLUDE nom_arch Donde: nom_arch: Especifica un archivo existente el cual contiene sentencias vlidas. Si el archivo se encuentra en el directorio actual se puede dar solo el nombre del archivo, si no, debe darse tanto la trayectoria como el nombre del archivo.

Instituto Tecnolgico de la Laguna

Pag. 7

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

Los archivos INCLUDE normalmente contienen; macros, constantes y definiciones, los PROCEDIMIENTOS se escriben en mdulos .OBJ separados, o en bibliotecas. Bibliotecas. Una biblioteca o librera es un archivo, normalmente con la extensin (.LIB), la cual contiene dos o ms mdulos (.OBJ), estos mdulos almacenan procedimientos, los cuales realizan procesos especficos, ejemplos de procedimientos almacenados en bibliotecas son los siguientes: y PASCAL + write, writeln + read, readln + ord, abs, sqr, sqrt, clrscr, gotoxy y C + printf, fprintf, cprintf + scanf, fscanf + pow, gets, clrscr, gotoxy Los mdulos almacenados en las bibliotecas, se encuentran en cdigo mquina reubicable (OBJ), son unidos al archivo ejecutable en el momento del enlace, despus de unir los mdulos reubicables declarados en la lnea de comandos. En los lenguajes de alto nivel, se proveen mecanismos para que ciertas bibliotecas (normalmente las que contienen funciones o procedimientos de E/S y de uso comn) sean llamadas de manera implcita al realizar el enlazado. LIB.EXE El manejador de bibliotecas (LIB.EXE) nos permite reunir en un solo archivo (.LIB) mdulos reubicables (.OBJ) ya compilados o ya ensamblados con anterioridad. La ventaja de una librera es que en el momento del enlace solo llama de la biblioteca, los procedimientos que estamos utilizando en nuestro programa. El manejador de bibliotecas nos permite las siguientes acciones sobre una librera: Crear un nuevo archivo de biblioteca. Sumar mdulos (.OBJ) a una biblioteca ya existente. Borrar mdulos de una biblioteca. Remplazar mdulos de una biblioteca. Sacar mdulos de una biblioteca como archivos (.OBJ)

y y y y y

Sintaxis: LIB lib_vieja [opciones] [comandos] [,arch_list] [,[lib_nuev]] [;] Donde: lib_vieja: Es una librera ya existente a la que se le desea hacer modificaciones. Si no existe se crea. Si no se proporciona extensin, por default toma (.LIB) opciones: Son alternativas usadas en la modificacin o creacin de una librera. Estas son las siguientes: /?: Ayuda en lnea. /HELP Ayuda en pantalla. /IGNORECASE No considera Maysculas/Minsculas. /NOEXTDICITONARY No construye directorio. /NOIGNORECASE Es sensible al tamao. /NOLOGO Suprime indicativo de LIB.EXE /PAGESIZE:n Define el tamao de pgina, por definicin es de 16 bytes, con este tamao la librera ms grande es de 16*65535 = 1048560 bytes. comandos: Nos definen las acciones a realizar sobre la librera: + Suma un mdulo a la librera. Borra un mdulo de la librera. -+ Reemplaza un mdulo de la librera.
Instituto Tecnolgico de la Laguna Pag. 8

Lenguaje Ensamblador * -*

Uso de Procedimientos, Macros y Libreras Copia a un archivo .OBJ un mdulo de la librera. Copia a un archivo .OBJ un mdulo y luego lo borra de la librera.

arch_list: Crea un archivo, el cual contiene los nombres y smbolos pblicos almacenados en la librera. Lib_nuev: Especifica un nuevo nombre para una librera, por omisin es el de lib_vieja. especifica este campo, el comando LIB Cuando se

LIB nunca destruye la librera original, si se especifica un nuevo nombre, la crea con dicho nombre y si no se especifica un nuevo nombre a la librera original, le cambia la extensin por BAK. Usando el Macro Assembler de Microsoft Para ensamblar cada mdulo, desde la lnea de comandos se usaron las siguientes instrucciones, considerando el prompt como: C:\USER> C:\USER>masm imp; C:\USER>masm binasib1; C:\USER>masm ensa34C; A continuacin como ya se tienen los archivos .OBJ se crea la librera MILIB.LIB, usando la siguiente instruccin: C:\USER>lib milib +binasib1 +imp, milib.lst; Nota: Se considera que ya hay un PATH definido, y para el archivo LIB.EXE se tiene considerado su localizacin en dicho PATH.

Instituto Tecnolgico de la Laguna

Pag. 9

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

INTERFAZ PROGRAMABLE DE PERIFERICOS (PPI) 8255


El PPI 8255 es un dispositivo de E/S general, programable, capaz de controlar 24 lneas con diferentes configuraciones (entrada/salida) y en hasta 3 modos de operacin.

CONEXIONES DEL 8255 - D0..D7: Bus de datos bidireccional de 3 estados. - RESET: Esta seal borra el registro de control y todos los puertos (A, B y C) son colocados en modo entrada. - RD: Utilizada por la CPU para leer informacin de estado o datos procedentes del 8255. - WR: Utilizada por la CPU para enviar palabras de control o datos al 8255. - A0..A1: Lneas de direccin: permiten seleccionar uno de los tres puertos o el registro de control. - PA0..PA7: Puerto A: puerto de entrada/salida de 8 bits. - PB0..PB7: Puerto B: puerto de entrada/salida de 8 bits. - PC0..PC7: Puerto C: puerto de entrada/salida de 8 bits. DESCRIPCION DE SU FUNCIONAMIENTO Las dos lneas de direcciones definen cuatro puertos de E/S en el ordenador: los tres primeros permiten acceder a los puertos A, B y C; el cuarto sirve para leer o escribir la palabra de control. El 8255 est dividido en dos grupos internos: el grupo A, formado por el puerto A y los 4 bits ms significativos del puerto C; y el grupo B, constituido por el puerto B junto a los 4 bits menos significativos del puerto C. El puerto C est especialmente diseado para ser dividido en dos mitades y servir de apoyo a los puertos A y B en algunos sistemas. El 8255 soporta 3 modos de operacin: el modo 0 (entrada y salida bsica), el modo 1 (entrada y salida con seales de control) y el modo 2 (bus bidireccional de comunicaciones). La configuracin por defecto de los tres puertos estn configurados de en modo de entrada, y las 24 lineas estn configurados en 1. Esta configuracin puede ser alterada por el programador dependiendo los usos que le den. El modo para el puerto A y B se puede seleccionar por separado; el puerto C est dividido en dos mitades relacionadas con el puerto A y el B. Todos los registros de salida son reseteados ante un cambio de modo, incluyendo los biestables de estado. Las configuraciones de modos son muy flexibles y se acomodan a casi todas las necesidades posibles.

Instituto Tecnolgico de la Laguna

Pag. 10

Lenguaje Ensamblador MODOS DE OPERACIN DEL 8255

Uso de Procedimientos, Macros y Libreras

MODO 0 Esta configuracin implementa simples funciones de entrada/salida para cada bit de los 2 puertos de 8 bits y los 2 puertos de 4 bits; los datos son ledos y escritos sin ms, sin ningn tipo de control adicional. Los puertos pueden ser configurados de entrada (sin latch) o salida (los datos permanecen memorizados en un latch). MODO 1 Este modo es el strobed input/output (entrada/salida a travs de un protocolo de seales). Existen dos grupos (A y B) formados por los puertos A y B ms el puerto C, que es repartido a la mitad entre ambos grupos para gestionar las seales de control. Tanto si se configura de entrada como de salida, los datos permanecen en un latch. Con este modo es factible conectar dos 8255 entre s para realizar transferencias de datos en paralelo a una velocidad considerable, con posibilidad de generar interrupciones a la CPU en el momento en que los datos son recibidos o hay que enviar uno nuevo (consltese documentacin tcnica). MODO 2 En este modo se constituye un bus bidireccional de 8 bits, por el que los datos pueden ir en un sentido o en otro, siendo el flujo regulado de nuevo por seales de control a travs del puerto C. Este modo slo puede operar en el Grupo A. Tanto las entradas como salidas son almacenadas en latch. NOTA: Existen varias combinaciones posibles de estos modos, en las que las lneas del puerto C que no son empleadas como seales de control pueden actuar como entradas o salidas normales, quedando las lneas 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 funcin: cuando el bit 7 del puerto B est a 1, el puerto A recibe el cdigo de rastreo de la tecla pulsada, que luego puede ser ledo desde la interrupcin del teclado. Si el bit 7 del puerto B est a 0, entonces el puerto A devuelve informacin sobre la configuracin del sistema en los PC (no en los XT): en el bit 0 (a 1 si hay disqueteras), bits 2..3 (nmero de bloques de 16 kb de memoria que obsoleto e intil!), bits 4..5 (tipo de pantalla: 11 MDA, 10 Color 80x25, 01 Color 40x25) y bits 6..7 (nmero de unidades de disco, si el bit 0=1). Puerto B (61h) Bit 0 (PC/XT: conectado a la lnea GATE del contador 2 del 8253), bit 1 (PC/XT: conectado al altavoz), bit 2 (slo PC: selecciona el contenido del puerto C), bit 3 (en XT: selecciona contenido del puerto C; en PC: a 0 para activar el motor del casete), bit 4 (PC/XT: a 0 para activar la RAM), bit 5 (PC/XT: a 0 para activar seales de error en el slot de expansin), bit 6 (PC/XT: a 1 activa la seal de reloj del teclado), bit 7 (en PC: empleado para seleccionar la funcin del puerto A; tanto en PC como en XT sirve adems para enviar una seal de reconocimiento al teclado). Puerto C (62h) Si el bit 2 del puerto B (PC) o el bit 3 del puerto B (XT) estn a 1: y En los PC: los bits 0..3: mitad inferior del 2 banco de conmutadores de la placa base (RAM en slots de expansin); bit 4 (entrada de casete). y En los XT: bit 1 (activo si coprocesador instalado), bits 2..3 (bancos de RAM en placa base). y En PC/XT: bit 5 (OUT del contador 2 del 8253), bit 6 (a 1 si comprobar errores en slots de expansin), bit 7 (1 si comprobar error de paridad). y Si el bit 2 del puerto B (PC) o el bit 3 del puerto B (XT) estn a 1: y En los PC: bits 0..3 parte alta del segundo banco de conmutadores de configuracin (no usada). y En los XT: bits 0..1 tipo de pantalla (11 MDA, 10 color 80x25, 01 color 40x25), bits 2..3 (n de disqueteras menos 1). y En PC/XT: los bits 4..7 estn igual que en el caso anterior (no dependen del bit 2 3 del puerto B).

Instituto Tecnolgico de la Laguna

Pag. 11

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

EL TEMPORIZADOR 8253 U 8254 El 8253/4 es un chip temporizador que puede ser empleado como reloj de tiempo real, contador de sucesos, generador de ritmo programable, generador de onda cuadrada, etc. En este captulo, la informacin vertida estar relacionada con el 8254 que equipa a los AT, algo ms potente que el 8253 de los PC/XT; sin embargo, las pocas diferencias sern comentadas cuando llegue el caso.

Este circuito integrado posee 3 contadores totalmente independientes, que pueden ser programados de 6 formas diferentes. D7..D0: BUS de datos bidireccional de 3 estados. CLK 0: CLOCK 0, entrada de reloj al contador 0. OUT 0: Salida del contador 0. GATE 0: Puerta de entrada al contador 0. CLK 1: CLOCK 1, entrada de reloj al contador 1. OUT 1: Salida del contador 1. GATE 1: Puerta de entrada al contador 1. CLK 2: CLOCK 2, entrada de reloj al contador 2. OUT 2: Salida del contador 2. GATE 2: Puerta de entrada al contador 2. A0..A1: Lneas de direccin para seleccionar uno de los tres contadores o el registro de la palabra de control. CS: Habilita la comunicacin con la CPU. WR: Permite al 8254 aceptar datos de la CPU. RD: Permite al 8254 enviar datos a la CPU.

El buffer del bus de datos, de 8 bits y tres estados, comunica el 8254 con la CPU. La lgica de lectura y escritura acepta entradas del bus y genera seales de control para las partes funcionales del 8254. Las lneas A0..A2 seleccionan uno de los tres contadores o el registro de la palabra de control, para poder leerlos o escribirlos. El registro de la palabra de control es seleccionado Cuando A0=A1=1, este registro slo puede ser escrito (se puede obtener informacin de estado, como se ver ms adelante, con el comando read-back del 8254, no disponible en el 8253). Los contadores 1, 2 y 3 son idnticos en su funcionamiento, por lo que slo se describir uno; son totalmente independientes y cada uno de ellos puede ser programado en una modalidad diferente. OPERACIONES DE ESCRITURA El 8254 es muy flexible a la hora de ser programado. Basta con tener en cuenta dos cosas: por un lado, escribir siempre primero la palabra de control, antes de enviar la cuenta inicial al contador. Por otro, dicha cuenta inicial debe seguir exactamente el formato seleccionado en la palabra de control (enviar slo byte bajo, enviar slo byte alto, o bien enviar ambos consecutivamente). Teniendo en cuenta que cada contador tiene su propio puerto y que la palabra de control indica el contador al que est asociada, no hay que seguir un orden especial a la hora de programar los contadores. Esto significa que, por ejemplo, se puede enviar la palabra de control de cada contador Instituto Tecnolgico de la Laguna Pag. 12

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

seguida de su cuenta inicial, o bien enviar todas las palabras de control para los 3 contadores y despus las 3 cuentas iniciales; tambin es vlida cualquier combinacin intermedia de estas secuencias (por ejemplo: enviar la palabra de control para el contador 0, despus la palabra de control para el contador 1, despus la parte baja de la cuenta para el contador 0, luego la parte baja de la cuenta para el contador 1, la parte alta de la cuenta para el contador 0, etc...). Un nuevo valor de cuenta inicial puede ser almacenado en un contador en cualquier momento, sin que ello afecte al modo en que ha sido programado (el resultado de esta operacin depender del modo, como se ver ms adelante). Si se programa el contador para leer/escribir la cuenta como dos bytes consecutivos (bajo y alto), el sentido comn indica que entre ambos envos/recepciones no conviene transferir el control a una subrutina que utilice ese mismo contador para evitar un resultado incorrecto. OPERACIONES DE LECTURA Existen tres posibles mtodos para leer el valor de un contador en el 8254. El primero es el comando Read-Back, slo disponible en el 8254 (y no en el 8253), como luego veremos. El segundo consiste en leer simplemente el contador accediendo a su puerto correspondiente: este mtodo requiere inhibir la entrada CLK al contador (por ejemplo, a travs de la lnea GATE o utilizando circuitera exterior de apoyo) con objeto de evitar leer la cuenta en medio de un proceso de actualizacin de la misma, lo que dara un resultado incorrecto. El tercer mtodo consiste en el comando de enclavamiento. MODOS DE OPERACIN DEL 8253 8254 MODO 0: Interrupt On Terminal Count (Interrupcin al final de la cuenta). Es empleado tpicamente para contar sucesos. Tras escribir la palabra de control, OUT est inicialmente en estado bajo, 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. La entrada GATE puesta a 0 permite inhibir la cuenta, sin afectar a OUT. El contador sigue evolucionando tras llegar a cero (0FFFFh, 0FFFEh, ...) por lo que lecturas posteriores del mismo devuelven valores pseudoaleatorios. Tras escribir la cuenta inicial y la palabra de control en el contador, la cuenta inicial ser cargada en el prximo pulso del reloj conectado (CLK), pulso que no decrementa el contador: para una cuenta inicial N, OUT permanecer a 0 durante N+1 pulsos del reloj tras escribir la cuenta inicial. Si se escribe una nueva cuenta en el contador, ser cargada en el prximo pulso del reloj y el contador comenzar a decrementarse; si se enva una cuenta de dos bytes, el primer byte enviado inhibe la cuenta y OUT es puesto a cero inmediatamente (sin esperar a CLK): tras escribir el segundo byte, la cuenta ser cargada en el siguiente pulso del reloj. Esto permite sincronizar la secuencia de conteo por software. Si se escribe una nueva cuenta mientras GATE=0, sta ser cargada en cualquier caso en el siguiente pulso del reloj: cuando GATE suba, OUT se pondr en alto tras N pulsos del reloj (y no N+1 en este caso). MODO 1: Hardware Retriggerable One-Shot (Monoestable programable). OUT ser inicialmente alta y bajar en el pulso de reloj que sigue al flanco de subida de GATE, permaneciendo en bajo hasta que el contador alcance el cero. Entonces, OUT sube y permanece activo hasta el pulso del reloj que siga al prximo flanco de subida de GATE. Tras escribir la palabra de control y la cuenta inicial, el contador est preparado. Un flanco de subida de GATE provoca la carga del contador (CR -< CE) y que OUT baje en el prximo pulso del reloj, comenzando el pulso OneShot de N ciclos de reloj de duracin; el contador vuelve a ser recargado si se produce un nuevo flanco de subida de GATE, de ah que OUT permanezca en bajo durante N pulsos de reloj tras la ltima vez que suceda esto. El pulso One-Shot puede repetirse sin necesidad de recargar el contador con el mismo valor. GATE no influye directamente en OUT. Si se escribe una nueva cuenta durante un pulso One-Shot, el One-Shot en curso no resulta afectado, a menos, lgicamente, que se produzca un nuevo flanco de subida de GATE: en ese caso, el contador sera recargado con el nuevo valor.

Instituto Tecnolgico de la Laguna

Pag. 13

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

MODO 2: Rate Generator (Generador de ritmo). En este modo, el contador funciona como un divisor por N. Es empleado tpicamente para las interrupciones de los relojes de tiempo real. OUT estar inicialmente en alto. Cuando el contador se decremente hasta el valor 1, OUT pasar a estado bajo durante un pulso del reloj; tras ello, volver a subir y el contador se recargar con la cuenta inicial, repitindose el proceso. Este modo es, por tanto, peridico, y la misma secuencia se repite indefinidamente. Para una cuenta inicial N, la secuencia se repite cada N ciclos de reloj (CLK). Si GATE=0 la cuenta descendiente se detiene: si GATE es bajado durante un pulso de salida, OUT sube inmediatamente. Un flanco de subida en GATE provoca una recarga del contador con el valor de cuenta inicial en el siguiente pulso del reloj (despus, como cabra esperar, OUT bajar tras los N pulsos del reloj correspondientes): GATE puede ser utilizado para sincronizar el contador. Tras escribir la palabra de control y la cuenta inicial, el contador ser cargado en el prximo pulso del reloj: OUT bajar N pulsos de reloj despus, lo que permite tambin una sincronizacin por software. Escribir un nuevo valor de cuenta durante el funcionamiento del contador no afecta a la actual secuencia de cuenta; si se recibe un flanco de subida de GATE antes del final del perodo el contador se recargar con ese nuevo valor de cuenta inicial tras el prximo pulso del reloj y volver a comenzar, en caso contrario se recargar con el nuevo valor tras finalizar con normalidad el ciclo en curso. MODO 3: Square Wave Mode (Generador de onda cuadrada). Este modo es empleado normalmente para la generacin de una seal de onda cuadrada. Este modo es similar al 2, con la diferencia de que la salida OUT conmuta al transcurrir la mitad de la cuenta: inicialmente est en alto, pero al pasar la mitad de la cuenta pasa a estado bajo hasta que la cuenta finaliza. Este modo es tambin peridico: la onda resultante para una cuenta inicial N tiene un perodo de N ciclos. Si GATE=0 la cuenta descendiente se detiene: si GATE es bajado durante un pulso de salida, OUT sube inmediatamente sin esperar ningn CLK. 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. Tras escribir la palabra de control y la cuenta inicial, el contador ser cargado en el prximo pulso del reloj: tambin puede ser sincronizado por software. Escribir un nuevo valor de cuenta durante el funcionamiento del contador no afecta a la actual secuencia de cuenta; si se recibe un flanco de subida de GATE antes del final del medio-perodo el contador se recargar con ese nuevo valor de cuenta inicial tras el prximo pulso del reloj y volver a comenzar, en caso contrario se recargar con el nuevo valor tras finalizar con normalidad el medio-ciclo en curso. Para valores de cuenta impares, la duracin a nivel alto de OUT ser un perodo de reloj mayor que la duracin a nivel bajo. MODO 4: Software Triggered Mode (Pulso Strobe iniciado por software). OUT est en alto al principio; cuando la cuenta inicial expira, OUT baja durante un pulso de reloj y luego vuelve a subir. El proceso se inicia cuando se escribe la cuenta inicial. GATE=0 inhibe el contador y GATE=1 lo habilita; GATE no influye en OUT. Tras escribir la palabra de control y la cuenta inicial, el contador ser cargado en el prximo pulso del reloj: como ese pulso no decrementa el contador, para una cuanta inicial N, OUT no bajar hasta N+1 pulsos de CLK. Si se escribe una nueva cuenta durante el proceso, se cargar en el prximo pulso CLK y continuar el proceso de cuenta con la nueva cuenta escrita; si la cuenta es de 2 bytes, al escribir el primero no se altera el funcionamiento del contador hasta que se enve el segundo. MODO 5: Hardware Triggered Strobe (Pulso Strobe iniciado por hardware). OUT estar en alto al principio: con el flanco de subida de la seal GATE, el contador comienza a decrementar la cuenta. Cuando llega a cero, OUT baja durante un pulso CLK y luego vuelve a subir. Despus de escribir la palabra de control y la cuenta inicial, el contador no ser cargado hasta el pulso de reloj posterior al flanco de subida de GATE. Este pulso CLK no decrementa el contador: por ello, ante una cuenta inicial N, OUT no bajar hasta que pasen N+1 pulsos de reloj. GATE no afecta a OUT. Instituto Tecnolgico de la Laguna Pag. 14

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

Si una nueva cuenta inicial es escrita durante el proceso, la actual secuencia del contador no ser alterada; si se produce un flanco de subida en GATE antes de que la nueva cuenta sea escrita pero despus de que expire la cuenta actual, el contador ser cargado con la nueva cuenta en el prximo pulso del reloj. EL 8254 EN LA PC Todos los AT y PS/2 llevan instalado un 8254 o algo equivalente; los PC/XT van equipados con un 8253, algo menos verstil; los PS/2 ms avanzados tienen un temporizador con un cuarto contador ligado a la interrupcin no enmascarable, si bien no lo consideraremos aqu. Todos los contadores van conectados a un reloj que oscila a una frecuencia de 1.193.180 ciclos por segundo (casi 1,2 Mhz). La direccin base en el espacio de E/S del ordenador elegida por IBM cuando dise el PC es la 40h. Por tanto, los tres contadores son accedidos, respectivamente, a travs de los puertos 40h, 41h y 42h; la palabra de control se enva al puerto 43h. La seal GATE de los contadores 0 y 1 est siempre a 1; en el contador 2 es seleccionable el nivel de la lnea GATE a travs de bit 0 del puerto E/S 61h. 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); el usuario normalmente programa el contador 2 en el modo 2 3. La salida del contador 0 est conectada a IRQ 0 (ligado a la INT 8, que a su vez invoca a INT 1Ch); este contador est programado por defecto con el valor cero (equivalente a 65536), por lo que la cadencia de los pulsos es de 1.193.180/65.536 = 18,2 veces por segundo, valor que determina la precisin del reloj del sistema, ciertamente demasiado baja. Se puede modificar el valor de recarga de este contador en un programa, llamando a la vieja INT 8 cada 1/18,2 segundos para no alterar el funcionamiento normal del ordenador, si bien no es conveniente instalar programas residentes que cambien permanentemente esta especificacin: los programas del usuario esperan encontrarse el temporizador a la habitual y poco til frecuencia de 18,2 interrupciones/segundo. La salida del contador 1 controla el refresco de memoria en todas las mquinas, su valor normal para el divisor es 18; aumentndolo se puede acelerar el funcionamiento del ordenador, con el riesgo -eso s- de un fallo en la memoria, detectado por los chips de paridad -si los hay-, que provoca generalmente el bloqueo del equipo. De todas maneras, en los PC/XT se puede aumentar entre 19 y 1000 sin demasiados riesgos, acelerndose en ocasiones hasta casi un 10% la velocidad de proceso del equipo. En los AT la ganancia de velocidad es mucho menor y adems este es un punto demasiado sensible que conviene no tocar para no correr riesgos, aunque se podra bajar hasta un valor 2-17 para ralentizar el sistema. Sin embargo, no es conveniente alterar esta especificacin porque, como se ver ms adelante, hay un mtodo para realizar retardos (empleado por la BIOS y algunas aplicaciones) que se vera afectado. La salida del contador 2 puede estar conectado al altavoz del ordenador para producir sonido; alternativamente puede emplearse para temporizar. Es el nico contador que queda realmente libre para el usuario, lo que suele dar quebraderos de cabeza a la hora de producir sonido.

TEMPORIZACION
Los contadores 0 y 1, especialmente este ltimo, ya estn ocupados por el sistema; en la prctica el nico disponible es el 2. Este contador ha sido conectado con el doble propsito de temporizar y de generar sonido. Para emplearlo en las temporizaciones, es preciso habilitar la puerta GATE activando el bit 0 del puerto 61h; tambin hay que asegurarse de que la salida del contador no est conectada al altavoz (a menos que se desee msica mientras se cronometra) poniendo a 0 el bit 1 del mismo puerto (61h): IN AL,61h AND AL,11111101b OR AL,00000001b JMP SHORT $+2 OUT 61h,AL ; borrar bit 1 (conexin contador 2 con el altavoz) ; activar bit 0 (lnea GATE del contador 2) ; estado de espera para E/S

Instituto Tecnolgico de la Laguna

Pag. 15

Lenguaje Ensamblador SNTESIS DE SONIDO.

Uso de Procedimientos, Macros y Libreras

La produccin de sonido es uno de los puntos ms dbiles de las computadoras compatibles, que slo superan por muy escaso margen a alguno de los micros legendarios de los 80, si bien las tarjetas de sonido han solventado el problema. Pero aqu nos conformaremos con describir la programacin del altavoz. En todos los PCs existen dos mtodos diferentes para generar sonido, con la utilizacin del 8254 o sin l, que veremos por separado. CONTROL DIRECTO DEL ALTAVOZ El altavoz del ordenador est ligado en todas las mquinas al bit 1 del puerto E/S 61h. Si se hace cambiar este bit (mantenindolo durante cierto tiempo alto y durante cierto tiempo bajo, repitiendo el proceso a gran velocidad) se puede generar una onda cuadrada de sonido. Cuanto ms deprisa se realice el proceso, mayor ser la frecuencia del sonido. Por fortuna, la baja calidad del altavoz del PC redondea la onda cuadrada y produce un sonido algo ms musical de forma involuntaria. No existe, en cualquier caso, control sobre el volumen, que dada la calidad del altavoz tambin est en funcin de la frecuencia. Este mtodo de produccin de sonido tiene varios inconvenientes. Por un lado, la frecuencia con que se hace vibrar al bit que lo produce, si no se tiene mucho cuidado, est a menudo ms o menos ligada a la capacidad de proceso de la computadora: esto significa que el sonido es ms grave en mquinas lentas y ms agudo en las rpidas. 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 mquina en que se produce. Es por ello que el pitido de error que produce el teclado es a menudo distinto entre computadoras, aunque tengan el mismo teclado instalado. Antes de comenzar a producir el sonido con este mtodo hay que bajar la lnea GATE del 8254, ya que cuando est en alto y se activa tambin el bit 1 del puerto E/S 61h, el temporizador es el encargado de producir el sonido (este es el segundo mtodo, como veremos). Por tanto, es preciso poner primero a cero el bit 0 del mismo puerto (61h): CLI ; evitar posible INT 8, entre otras IN AL,61h AND AL,11111110b JMP SHORT $+2 ; estado de espera para E/S OUT 61h,AL ; bajar GATE del contador 2 del 8254 MOV CX,100h ; 256 vueltas otro_ciclo: PUSH CX IN AL,61h XOR AL,2 ; invertir bit 1 JMP SHORT $+2 OUT 61h,AL MOV CX,300 ; constante de retardo retardo: LOOP retardo POP CX LOOP otro_ciclo STI CONTROL DEL ALTAVOZ MEDIANTE EL TEMPORIZADOR El otro mtodo posible consiste en emplear el contador 2 del temporizador conectado al altavoz; as, enviando el perodo del sonido (1.193.180/frecuencia en Hz) a dicho contador (programado en modo 3), ste se encarga de generar el sonido. Esto permite obtener sonidos idnticos en todos los ordenadores. Existe el pequeo problema de que la duracin del sonido ha de ser mltiplo de 1/18,2 segundos si se desea utilizar el reloj del sistema para determinarla (un bucle de retardo sera, una vez ms, dependiente de la mquina) ya que el contador 2 est ahora ocupado en la produccin de sonido y no se puede usar para temporizar (al menos, no sin hacer malabarismos). Alternativamente, se podra evaluar la velocidad de la CPU para ajustar las constantes de retardo o aumentar la velocidad de la interrupcin peridica. 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). Al final, conviene borrar ambos bits de nuevo. Ahora no es preciso inhibir las interrupciones para garantizar la calidad del sonido:

Instituto Tecnolgico de la Laguna

Pag. 16

Lenguaje Ensamblador Este diseo esta aplicado en el ;----------------- Macro IniciarBocina--------------iniBoc macro IN AL, 61H <-OR AL, 00000011B <--OUT 61H, AL <-Endm ;----------------- Macro FinalizarBocina--------------finBoc macro IN AL, 61H <-AND AL, 11111100B <--OUT 61H, AL <-endm

Uso de Procedimientos, Macros y Libreras

Las frecuencias en Hz de las distintas notas musicales estn oficialmente definidas y los msicos suelen tenerlas en cuenta a la hora de afinar los instrumentos. La escala cromtica temperada, adoptada por la American Standards Asociation en 1936

Instituto Tecnolgico de la Laguna

Pag. 17

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

Desarrollo.
En este programa se hace uso del altavoz de la computadora, la cual emite un sonido con cierta frecuencia si la clave de acceso que se le est solicitando es incorrecta, y si el cdigo ingresado es correcto imprime en pantalla un mensaje sobre el programa y el nombre de los integrantes del equipo. Este programa fue realizado utilizando algunos procedimientos y algunas macros.

Cdigo.
include bocina.mac include macros.mac ;Segmento de PILA pila segment para stack 'stack' db 64 dup (?) pila ends ;Segmento de DATOS datos segment para public 'data' linea db 10,13,36 nhex dw 0 msge db "Teclea tu NIP:$" ;Dgitos del 0 al 9 mal db "***Acceso Denegado***$" cont dw 3 archivo db "Exposicion hecha por Equipo 1 de ensamblador ", 10, 10, 13, " Antonio Vela", 10,13, " Jose Juan Zamora" ,10, 13, " Pedro Martnez $" datos ends ;Segmento de CODIGO code segment para 'code' assume cs:code, ss:pila, ds:datos inicio: mov ax, datos mov ds, ax mov nhex,0000 clear color call pedir call acomodo finBoc call acomodo call acomodo mov ah,1 int 21h sub al,30h or byte ptr nhex, al imprimir linea imprimir linea cmp nhex, 2010h jne mala clear color imprimir archivo finBoc imprimir linea
Instituto Tecnolgico de la Laguna Pag. 18

;inicializamos la variable nhex en 0 ;Muestra el mensaje que pide al usuario el NIP ;Accede al primer digito tecleado y lo acomoda ;Finaliza la bocina si es que est habilitada tras un nuevo intento.

;Al ASCCI a(41h) conversin a hexa

;Apagamos la bocina mediante la macro

Lenguaje Ensamblador jmp fin mala: mov dx, 297 frecuencia dx iniBoc imprimir mal imprimir linea imprimir linea imprimir linea imprimir linea mov ax, cont dec ax mov cont, ax cmp cont, 0 je fin color jmp inicio Fin: finBoc MOV AX, 4C00H INT 21H ;PROCEDIMIENTOS pedir proc near ;Visualizar msge mov ah,9 lea dx, msge Int 21h ret pedir endp acomodo proc near mov ah,1 Int 21h sub al,30h or byte ptr nhex, al mov cl,4 rol nhex, cl ret acomodo endp code ends end inicio ;Leer el primer digito ;le mandamos una frecuencia 297 ;imprimimos la cadena de acceso denegado ;pasamos 4 reglones.

Uso de Procedimientos, Macros y Libreras

;Asignamos el ndice del contador a intentos. ;Si numero intentos=0 salimos de la aplicacin.

;finalizamos la aplicacin despus de 3 intentos fallidos.

;La opcin 1 de la Int 21 pedir un carcter. ;y lo guardara en al ;restamos 30h para nivelar a nivel hexa de la maquina. ;se hace un or afectando nhex ;se prepara cl para hacer una rotacin de 4bits para acomodar los dgitos pulsados.

Instituto Tecnolgico de la Laguna

Pag. 19

Lenguaje Ensamblador

Uso de Procedimientos, Macros y Libreras

MACROS. bocina.mac
;----------------- Macro Fecuencia--------------frecuencia MACRO BASE ; Esta macro es para sacar la base de MOV AX, BASE ; a sonar la bocina, la direccin del puerto OUT 42H, AL ; 42h es donde esta conectada fsicamente XCHG AL, AH ; la bocina. OUT 42H, AL ENDM ;----------------- Macro IniciarBocina--------------iniBoc macro IN AL, 61H OR AL, 00000011B OUT 61H, AL endm ;----------------- Macro FinalizarBocina------------finBoc macro IN AL, 61H AND AL, 11111100B OUT 61H, AL endm

macros.mac
;-----------------Macro imprimir---------------imprimir macro cad lea dx,cad mov ah,9 int 21h endm ;----------------- Macro limpiar--------------clear macro mov ah,00h ;limpia la pantalla mov al,03h int 10h endm ;----------------- Macro colores--------------color macro mov ah, 07h mov al, 00h mov bh, 06h mov cx, 00h mov dx, 4F50h int 10h endm

Instituto Tecnolgico de la Laguna

Pag. 20

Das könnte Ihnen auch gefallen