P. 1
uso de procedimientos y macros (lenguaje ensamblador)

uso de procedimientos y macros (lenguaje ensamblador)

|Views: 8.184|Likes:

More info:

Published by: Antonio Vela Hernandez on Mar 09, 2011
Copyright:Attribution Non-commercial

Availability:

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

07/13/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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

61H <-OR AL. 61H <-AND AL. adoptada por la American Standards Asociation en 1936 Instituto Tecnológico de la Laguna Pag. 00000011B <--OUT 61H. La escala cromática temperada. 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. AL <-Endm . 17 .Macro FinalizarBocina--------------finBoc macro IN AL.----------------.Macro IniciarBocina--------------iniBoc macro IN AL.----------------. 11111100B <--OUT 61H. AL <-endm Uso de Procedimientos.Lenguaje Ensamblador Este diseño esta aplicado en el .

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

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

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

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)//-->