P. 1
interrupciones ensamblador

interrupciones ensamblador

|Views: 1.805|Likes:
Publicado porViridiana Mo

More info:

Published by: Viridiana Mo on May 02, 2011
Copyright:Attribution Non-commercial

Availability:

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

07/10/2013

pdf

text

original

para limipar pantalla... pon esta biblioteca + esta sentencia #include <stdlib.

h> /* luego pones la siguiente setencia el lugar que tu quieras que la pantalla se limpie*/ system("CLS"); ^^ *****************************8 puedes usar system("cls");que esta en la stdlib.h ********************************8 3. Manipulación de cadenas (Strings) Definición de string En el lenguaje ensamblador el tipo de dato cadena (string) no está definido, pero para fines de programación, una cadena es definida como un conjunto de localidades de memoria consecutivas que se reservan bajo el nombre de una variable. Almacenamiento en memoria De acuerdo con la definición anterior, las siguientes líneas en ensamblador declaran cadenas: .DATA Cadena_ASCII db Cadena ,13,10, $ Cadena_Enteros dw 5 Dup (0) Las dos líneas anteriores están declarando variables de tipo cadena. En el primer ca so, Cadena_ASCII reserva un total de 9 bytes de memoria (1 byte = 1 Carácter ASCII) incluyendo el carácter $ que indica fin d e cadena. En el segundo caso, Cadena_Enteros reserva espacio para almacenar 3 ca ntidades enteras o lo que es lo mismo 6 bytes de memoria (1 entero = 2 bytes), t odas inicializadas con cero. La diferencia en los casos anteriores radica en el tamaño del dato que compone la cadena, 1 byte para cadenas de caracteres y 2 o más bytes para cadenas de datos nu méricos. El almacenamiento en memoria se vería de la siguiente forma:

Instrucciones para el manejo de strings El lenguaje ensamblador cuenta con cinco instrucciones para el manejo de cadenas : MOVS: Mueve un byte o palabra desde una localidad de memoria a otra. LODS : Carga desde la memoria un byte en AL o una palabra en AX. STOS : Almacena el contenido del registro AL o AX en la memoria. CMPS : Compara localidades de memoria de un byte o palabra. SCAS : Compara el contenido de AL o AX con el contenido de alguna localidad de m emoria. Las instrucciones para cadenas trabajan en conjunto con la instrucción CLD, la cua l permite establecer que el sentido en el que las cadenas serán procesadas será de i zquierda a derecha. Otra instrucción importante es el prefijo de repetición REP, el cual permite que una instrucción para manejo de cadenas pueda ser repetida un número determinado de vece s. Los registros índice juegan un papel importante en el procesamiento de cadenas de datos, el par de registros CS:SI indican la dirección de la cadena original que se rá procesada, y el par ES:DI contienen la dirección donde las cadenas pueden ser alm acenadas. Para comprender realmente como funcionan las instrucciones para cadenas analizar emos varios programas que fueron escritos para este fin. Recuerde que las cadena

DS:SI->Cad3 lea di.MODEL tiny .cad4 .cad2 .ES:DI->Cad2 rep movsw . sino a c ualquier tipo de dato. Descripción: Este programa demuestra la diferencia entre el uso de MOVSB y MOVSW.cad1 .Imprimir Cad1 en pantalla mov ah.'$' cad3 db 18 dup (' ') cad4 db 18 dup (' ') .CODE inicio: . El resultado es el mismo en ambos casos .ASM Autor: Juan Carlos Guzmán C. mov ax.MODEL tiny .Punto de entrada al programa cld .cad1 . mov ah. DI=DI+1 lea dx. El programa debe copiar Cad3 dentro de Cad1 usando 18 repeticiones con MOVSB.09h . int 21h . mov cx. Descripción: Este programa ilustra la forma de utilizar la instrucción MOVS para cop iar el contenido de una cadena dentro de otra.CODE inicio: .Cad4->Cad2 lea dx. .s en ensamblador no se refieren únicamente a cadenas de caracteres ASCII.DS:SI->Cad4 lea di.COMMENT Programa: Cad1.Procesamiento de cadenas de izq->der.COMMENT Programa: Cad2.Punto de entrada al programa cld .ES:DI->Cad1 rep movsb .DATA cad1 db 'Cadena de prueba1 '.'$' cad2 db 'Esta es la cadena2'.cad2 . lea dx.'$' cad2 db 'Cadena de prueba2 '. mov ah.DATA cad1 db 'Esta es la cadena1'. .DS:SI->ES:DI.Imprimir Cad2 en pantalla mov ah. mov cx.procesamiento de izq->der.cad1 . . lea dx.ES:DI contienen la dirección de Cad2 lea si.18 .cad2 .cad1 .Terminal programa y regresar al DOS int 21h .ASM Autor: Juan Carlos Guzmán C. int 21h .Longitud de la cadena lea si.longitud de la cadena original lea di.Cad3->Cad1 mov cx.cad2 . SI=SI+1.Imprimir Cad2 int 21h .4c00h .18 . de spués realiza lo mismo con Cad4 y Cad2 pero usando solo nueve repeticiones de la i nstrucción MOVSW.'$' .09h .09h .09h .Imprimir Cad1 int 21h . END inicio END .cad3 .DS:SI contienen la dirección de Cad1 rep movsb .Longitud de la cadena por pares de bytes lea si.9 .

COMMENT Programa: Cad3.Punto de entrada al programa cld .almacenarlo en la posición actual de DI dec di .MODEL tiny .Obtener siguiente carácter de Cad1 lea dx.Procesamiento de izq->der mov al.cad2+15 .ASM Autor: Juan Carlos Guzmán C.Disminuir DI loop otro .ES:DI->Cad1 rep stosb .mov ax. el área de memoria reservado para la variable Cad1 es rellenada con el carácter ASCII '*'.Imprimir Cad1 antes de que sea borrada mov ah. En este caso.Obtener el primer carácter de Cad1 mov [di]. Descripción: Este programa muestra el uso de la instrucción LODSB.MODEL tiny . int 21h .cad1 .4c00h .cad1 . Al final se imprime n las dos cadenas. Descripción: Este programa utiliza la instrucción STOSB para rellenar un rea de mem oria con el contenido del registro AL.09h .DATA cad1 db 'Cadena de prueba'.Terminar programa y regresar al DOS int 21h .'*' .Imprimir Cad1 después de ser borrada int 21h .ES:DI apuntan al final del área reservada para otro: .ASM Autor: Juan Carlos Guzmán C.Rellenar 16 bytes de memoria con '*' lea dx. mov ax. mov ah. .'$' cad2 db 16 dup (' ').Longitud de la cadena que se va a rellenar lea di.Imprimir cadena invertida int 21h .'$' CODE inicio: lea dx.4c00h . .09h .Terminar programa y regresar al DOS int 21h .16 . END inicio END .Inicializar AL con '*' mov cx. mov ah.cad1 .al . cld .'$' .16 .cad1 .DATA cad1 db 'Cadena de prueba'.Imprimir cadena original int 21h . mov cx. mov ah. El programa invierte el orden de los elementos de una cadena y los almacena en o tra cadena que originalmente esta inicializada con espacios.10.almacenar la cadena invertida lodsb .cad2 .DS:SI->Cad1 lea di.09h .cad1 . .13.CODE inicio: .09h .Longitud de la cadena lea si.Procesamiento de izq->der. lea dx. END inicio END COMMENT Programa: Cad4.

bh .4c00h . Descripción: Este programa utiliza la instrucción CMPSB para comparar si dos cadenas son iguales.cad1 .0 . .entonces debe ser que Cad1 es igual que Cad3 int 21h .DS:SI-> Cad1 repe cmpsb .Imprimir mensaje int 21h . mov ah.'.Si.BH=0 cld .Si.cad1 .DS:SI->Cad1 repe cmpsb . En este programa se declaran 3 cadenas de prueba.error1 . El registro BH sirve como bandera: BH=0 No hay cadenas iguales BH=1 Cad1 es igual a Cad2 BH=2 Cad1 es igual a Cad3 Se puede cambiar el contenido de las cadenas de prueba para comprobar los tres p osibles resultados.09h .cad2 .10.imprimir mensaje jmp salir2 cad1_cad2: lea dx.Terminar programa y regresar al DOS int 21h .'$' cad3 db 'Cadena2'.'$' error2 db 'Cadena 1 = Cadena 2'. Entonces Cad1 es igual a Cad2 lea dx.Comparar Cad1 y Cad3 jne salir .DATA cad1 db 'CADENA1'. mov cx. jmp salir2 .Imprimir mensaje int 21h .Es BH=0? je ninguna .Comparar Cad1 y Cad2 jne otra .Son iguales ?No. entonces BH=1 otra: mov cx. salir2: .'$' .7 .MODEL tiny .ES:DI-> Cad2 lea si.Son iguales ?No.error2 .Comparación de izq->der.No.'$' error1 db 'No hay cadenas iguales. Entonces no hay cadenas iguales cmp bh.7 .13. Comparar Cad1 y Cad3 mov bh.Longitud de la cadena lea di.09h .CODE inicio: xor bh.2 .Si no es ninguna de las anteriores mov ah. mov ah.10.error3 .1 . imprimir mensajes.Si.1 . entonces BH=2 salir: cmp bh.'$' error3 db 'Cadena 1 = Cadena 3'.Si... ninguna: lea dx.13.ES:DI->Cad3 lea si.mov ax.13.COMMENT Programa: Cad5. Es BH=1? je cad1_cad2 .cad3 .09h . mov bh.ASM Autor: Juan Carlos Guzmán C.Longitud de la cadena lea di.'$' cad2 db 'CADENA1'.10. END inicio END .

Programación de E/S Definición de interrupción Una interrupción es un estado en el cual el microprocesador detiene la ejecución de un programa para atender una petición especial solicitada por el propio programa o por un dispositivo físico conectado al microprocesador externamente.Terminar programa y regresar al DOS int 21h ..Ejecuta las instrucciones de la rutina de interrupción. 4. por otro lado. un intento de dividir por cero o una transferencia de datos entre re gistros de diferentes longitudes. Las computadoras basadas en el microprocesador 8086/8088 cuentan solamente con u n PIC. Las interrupciones por software son llamadas desde los programas y son proporcio nadas por el sistema operativo (MS-DOS).. Tipos de interrupciones El microprocesador puede atender dos tipos de interrupciones: interrupciones por software e interrupciones por hardware. el microproc esador realiza los siguientes pasos: 1.. Las interrupciones externas son provocadas por los dispositivos periféricos conect ados al microprocesador.Detiene la ejecución del programa 2. las interrupciones por Hardware son proporcionadas por el propio microprocesador y también existen dos tipos: interrupciones por hardware internas y las interrupciones por hardware externas. terminales . Las interrupciones internas son invo cadas por el microprocesador cuando se produce alguna operación incorrecta. . las cua les son llamadas IRQ0 a IRQ7.4c00h . Las rutinas se almacenan en la memoria de la computadora cada vez que ésta es inic ializada. Las interrupciones fueron creadas para facilitar al programador el acceso a los diferentes dispositivos de la computadora (puertos de comunicaciones. Estas interrupciones son invocadas con la instrucción INT del ensamblador. Ejecución de una interrupción Cuando durante la ejecución de un programa se produce una interrupción. el cual se conoce como controlador programabl e de interrupciones (PIC). impresoras.. Existen dos tipos de estas: las interru pciones del DOS y las interrupciones del BIOS (Basic Input Output System o Siste ma Básico de Entrada/Salida). 6..Modifica el CS y el IP para que apunten a la dirección donde se encuentra la r utina de interrupción. con los cua les pueden proporcionar hasta un máximo de 16 líneas IRQ. con lo cual pueden proporcionar hasta 8 líneas de interrupción (IRQ). las computadoras basadas en el micr oprocesador 80286 y posteriores cuentan con dos chips controladores. IP y Banderas.Restablece usando la instrucción RETI los valores originales de los registros CS. La siguiente es una lista de las interrupciones por software disponibles por el sistema operativo. END inicio END 4. Interrupciones del BIOS Manejo de dispositivos periféricos INT 10H Manejo de la pantalla. las cuales son llamadas IR Q0 a IRQ15.. como p or ejemplo.Continua con la ejecución del programa en el punto donde fue interrumpido. a esto se le conoce como vector de interrupciones.). etc.mov ax. Por otro lado. Para lograr esto. IP y Banderas en la pila 3. a cada dispositivo periférico se le asi gna una línea física de interrupción que lo comunica con el microprocesador por medio de un circuito integrado auxiliar. 5.Almacena los registros CS.

7. Guarda la dirección donde se transfiere el control cu ando termina la ejecución del programa. 3. las cuales de ben ser invocadas en conjunto con el registro AH. INT 19H Activación de la rutina de arranque de la computadora. 13. 0. 9. INT 15H Manejo de cinta magnética. INT 17H Manejo de la impresora. INT 14H Manejo de los puertos de comunicaciones(RS232). 1. 2.INT 13H Manejo de unidades de disco.Entrada de carácter sin eco. 12. Servicios de fecha y hora INT 1AH Manejo del reloj. A continuación se mostrarán algunos programas que utilizan llamadas a diferentes int errupciones por software tanto del BIOS como del DOS.Entrada por el puerto serie. Interrupciones del DOS INT 20H Termina la ejecución de un programa.'$' .MODEL tiny . INT 27H Terminar un programa y devolver el control al DOS sin borrar el programa de la memoria. Servicios especiales INT 18H Activación del lenguaje Interprete Basic de la ROM. INT 23H Dirección de la interrupción que se ejecuta cuando se presiona Ctrl-Break. INT 26H Escritura directa de sectores del disco.E/S directa por pantalla.Borrar registro de entrada.COMMENT * Programa: Int1. . Manejo del estado del equipo INT 11H Servicios de la lista de elementos de la computadora. INT 22H Dirección de terminación. INT 25H Lectura directa de sectores del disco. 8.Salida a pantalla.Comprobación del estado de entrada. * . 10.13. 4. INT 12H Servicios para el cálculo del tamaño de la memoria.Terminación de un programa. El siguiente programa utiliza la función 09h de la interrupción 21 del DOS para most rar en la pantalla un mensaje. Descripción: Imprime una cadena de caracteres en la pantalla por medio de la función 09h de la interrupción 21h del DOS. INT 24H Manejo de errores críticos. INT 21H Esta interrupción proporciona una gran cantidad de funciones.Inicializar unidad de disco.Salida por el puerto serie. 6.DATA Mensaje db 'Interrupciones 21h del DOS'.Salida a la impresora.Entrada desde el teclado. INT 16H Manejo del teclado. Impresión de pantalla INT 5H Impresión de la información contenida en la pantalla. 5.Entrada directa de carácter sin eco.Entrada de carácter con eco. 11.10.Visualizar cadenas de caracteres.ASM Autor: Juan Carlos Guzmán C.

02h .Pagina de video 0 Mov dl.0 . Descripción: Imprime dos cadenas de caracteres en la pantalla. esto con el fin de tener mejor control sobre el lugar en el que los me nsajes son visualizados.COMMENT * Programa: Int3.30 .10.10h Int 16h Mov ax.09h Int 21h Mov Ah.4C00h Int 21h END Inicio END Como último ejemplo de esta sección.Mensaje2 Mov Ah.'. * .MODEL tiny .09h Int 21h Mov ax.13.COMMENT * Programa: Int2.09h Int 21h Lea DX.DATA Mensaje db 'Mas interrupciones'.ASM Autor: Juan Carlos Guzmán C. controlando su posi ción por medio de la función 02h de la Int 10h del BIOS.13.X=30 Mov dh.CODE Inicio: Lea DX.'$' Mensaje2 db 'Presione cualquier tecla...MODEL tiny .'$' . esto por medio de la interrupción 16h del BIOS con la función 10h.CODE Inicio: Lea DX. * .. pero a di ferencia del anterior éste no regresa al DOS inmediatamente. para ello se utiliza la función 10h de la interrupción 16h del BIOS.CODE Inicio: Mov Bh..Y=5 Mov Ah.ASM Autor: Juan Carlos Guzmán C.Mensaje Mov Ah. .10.'$' . se mostrará un programa que utiliza otra función de l BIOS.'$' Mensaje2 db 'Presione cualquier tecla.Mensaje Mov Ah. pero esta vez para posicionar el cursor en diferentes coordenadas de la pantalla.13. .Posicionar cursor .5 .4C00h Int 21h END Inicio END El siguiente programa exhibe dos cadenas de caracteres en la pantalla.DATA Mensaje db 'Mas interrupciones'.10. espera a que cualquie r tecla sea presionada y entonces termina.'.. Descripción: Imprime dos cadenas de caracteres en la pantalla por medio de la func ión 09h de la interrupción 21h del DOS y después espera a que una tecla sea presionada .

lo que se encuentra entre paréntesis cuadrados es opcional. parametro2. ax.Cadena . Por ejemplo el siguient e conjunto de instrucciones nos permite imprimir una variable de tipo cadena en la pantalla: Lea DX. Bh.MACRO Nombre [(parametro1.MACRO Imprime_Cad(Cadena) Lea DX.Imprime Mensaje 21h .Int Lea Mov Int Mov Mov Mov Mov Int Lea Mov Int Mov Int Mov Int END END 10h .Colocar cursor 10h . sólo es necesario indicar su nombre en el cuerpo del programa y el ensamblador se encargara de reemplazar la macroinstrucc ión por las instrucciones de la macro (expansión de la macro). El principal problema que esto nos ocasiona es que el tamaño de nuestro programa c rece considerablemente.02h .llamada a la interrupción 21h del DOS Si necesitamos que en nuestro programa se muestren mensajes constantemente. es o bvio que debemos duplicar este conjunto de instrucciones por cada mensaje que se desea enviar a pantalla. etc)] INSTRUCCIONES ENDM Nuevamente.Direccionar la cadena Mov AH.4C00h . La mejor solución en estos casos es el uso de las MACROS.X=40 dh.Usar la función 09h para imprimir cadenas Int 21h .09h .Mensaje2 . De acuerdo con esto. Los parámetros permiten que una misma macro pueda ser usada bajo diferentes condic iones. se puede crear una macro para posicionar el cursor en difere .09h . Ah. El formato general de una macro es el siguiente: .Terminar programa y salir al DOS 21h . más difícil será encontra r la causa de algún error cuando éste ocurra.Mensaje .24 .Imprimir Mensaje2 21h .Esperar tecla 16h . la macro para imprimir cadenas quedaría de la siguiente forma : .Pagina de video dl.10h . Inicio 5.Cadena Mov Ah. Ah. por ejemplo. y mientras más grande sea el programa.Y=24 Ah.09h Int 21h ENDM Parámetros y etiquetas Dentro de las propiedades más importantes de las macros se deben destacar la posib ilidad de utilizar parámetros y etiquetas. Una macro es un conjunto de instrucciones que se agrupan bajo un nombre descriptivo (macroinstrucción) y q ue sólo es necesario declarar una vez (macrodefinición). DX.09h . DX.0 . Macros Definición Una de las principales desventajas de la programación en lenguaje ensamblador es l a repetición constante de ciertos grupos de instrucciones. Ah. Una vez que la macro ha sido declarada.40 .

Descripción: Este programa muestra el uso de macros..Seleccionar página cero de video mov dl.Imprimir la Cadena n veces Loop Otra ..MACRO gotoxy (x. La siguiente macro nos muestra esta propiedad: .ntes coordenadas de la pantalla e indicar sus coordenadas por medio de parámetros.MODEL TINY . verifica si ésta fue dec larada. . el ensamblador toma las instrucciones del cuerpo de la macro y las reemplaza en el lugar donde la macro fue llamada.'$' . .02h .ASM Autor: Juan Carlos Guzmán C. Cuantos) Mov CX.Esta macro posiciona el cursor en las coordenadas que se le indican como .MACRO Imprime_nCad (Cadena.. una macro es declarada una sola vez y puede ser llamada cuantas veces sea necesario dentro del cuerpo del programa.MACRO tecla mov ah.Cuantos .10. Declaración de variables .y .Esta macro imprime una cadena pasada como parámetro.13.-----------------------------------------------------------------------. Suponga que se desea crear una macro que imprima una cadena un numero n de veces.************************************************************************ .'.Renglón mov ah.presionada..'.llamada a la int 10h del BIOS ENDM También existen situaciones en las que los parámetros no son necesarios.'.09h int 21h ENDM .10h int 16h ENDM Por otro lado. si esta verificación es exitosa.Aquí se declaran las macros.------------------------------------------------------------------------ . Cada vez que el ensamblador encuentra una macroinstrucción. . .09h . las etiquetas también son útiles dentro de las macros.Siguiente Impresión ENDM Ensamble de macros Como ya se mencionó antes. . esta macro p odría ser declarada de la siguiente forma: . . . Es el equivalente del readkey en Pascal.. es por esta razón que los parámetros son opcionales en la declaración de la macro..y) xor bh.Etiqueta interna Int 21h .Utiliza la función 09h de la Int 21h del DOS.COMMENT Programa: Macros1. Es el equivalente al GotoXY de Pascal.parámetros.Usar la función 09h Otra: .Esta macro realiza una pausa en el programa hasta que una tecla es .Cadena .DATA cad db 'Ejemplo del uso de macros. El siguiente programa muestra la declaración y uso de las macros: .Iniciar Contador Lea DX.'$' cad1 db 'Presiona una tecla.cadena mov ah.Direccionar la cadena que se va a imprimir Mov Ah.bh .Columna mov dh.MACRO imprime_cad(cadena) lea dx.x .'$' cad2 db 'Ejemplo del uso de la macro gotoxy.Función 02h para posicionar cursor int 10h .

también es más fácil de leer por otros.Colocar el cursor en 30.Colocar el cursor en 0.Declaración del punto de entrada limpiar_pantalla . E s el equivalente del readkey en Pascal.-----------------------------------------------------------------------.presione. Desventajas: El código ejecutable se vuelve más grande con cada llamada a la macro.0600h mov bh.12) .------------------------------------------------------------.Fin del programa y regresar al DOS.x mov dh.24 imprime_cad(cad1) . . ..Imprime el segundo mensaje tecla . Al ser más pequeño el código fuente.184fh int 10h ENDM . .17h mov cx.Utiliza la función 06h de la Int 10h del Bios.12 imprime_cad(cad2) . Código fuente más compacto.Imprime el primer mensaje imprime_cad(cad1) . Es el equivalente al GotoXY de Pascal. int 21h END inicio END Ventajas y desventajas Si bien es cierto que las macros proporcionan mayor flexibilidad a la hora de pr ogramar.Colocar el cursor en 50.0) .24) . Las macros deben ser bien planeadas para evitar la redundancia de código.Aquí comienza el cuerpo del programa principal .Imprimir el tercer mensaje gotoxy (50.------------------------------------------------------------.MACRO limpiar_pantalla mov ax.CODE inicio: .0 imprime_cad(cad) .02h int 10h ENDM .y mov ah.Espera a que se presione una tecla gotoxy (30.Esta macro posiciona el cursor en las coordenadas que se le indican como . también es cierto que tienen algunas desventajas. La siguiente es una lista de la principales ventajas y desventajas del uso de la s macros.bh mov dl.4c00h .0000h mov dx.Esta macro realiza una pausa en el programa hasta que una tecla se . Mayor flexibilidad en la programación al permitir el uso de parámetros. . .y) xor bh.MACRO gotoxy (x.parámetros.10h int 16h ENDM . Ventajas: Menor posibilidad de cometer errores por repetición.Llamada a la macro gotoxy (0.Esta macro limpia la pantalla.MACRO tecla mov ah.Esperar por una tecla mov ax.Imprimir el segundo mensaje tecla .

el procedimiento se coloca en memoria para que pueda ser utilizado por el programa. A continuación se presentan los pasos necesarios para ejecutar un procedimiento: 1..bh mov ah.. la única forma de lograr esto es colocando los parámet ros que nos interesan en los registros de propósito general antes de que el proced imiento sea ejecutado.El procedimiento termina cuando se encuentra la instrucción Ret 6.. Los procedimientos tienen la desventaja de que reducen la velocidad de ejecución d e los programas. Llamada a procedimientos Los procedimientos son llamados por los programas por medio de la instrucción CALL . Las principales ventajas en el uso de procedimientos son: permiten una codificac ión más limpia y compacta. Paso de parámetros Los procedimientos en lenguaje ensamblador no cuentan con un mecanismo para el p aso de parámetros. seguida del nombre del procedimiento. por lo cual. Un procedimiento se declara una sola vez en el código fuente y cuando el programa se ensambla y ejecuta. RET ENDP NOMBRE En donde PROC es una palabra reservada que indica el inicio de un procedimiento... Ejemplo: Call GotoXY El siguiente programa muestra la forma de pasarle parámetros a los procedimientos por medio de los registros generales.6...02h int 10h Ret Endp GotoXY En este ejemplo.. esto es porque un mismo procedimiento puede ser llamado varias v eces en el mismo programa y sólo requiere memoria una vez. Programación modular Definición de procedimientos Un procedimiento es un conjunto de instrucciones que tienen la finalidad de ejec utar una tarea especifica dentro de un programa. es decir el código fuente es más pequeño.. Este programa declara tres procedimientos: .El microprocesador almacena en la Pila el contenido del IP 3.Se coloca en el IP el valor del desplazamiento correspondiente al Procedimie nto 4. RET es una instrucción que indica la terminación del conjunto de instrucciones de u n procedimiento y finalmente ENDP es la palabra reservada para fin de procedimie nto. también permiten el ah rro de memoria. El siguiente procedimiento coloca el cursor en las coordenadas establecidas en D l y Dh. Los procedimientos son muy simi lares a las macros. las coordenadas XY se deben situar en el registro DX antes de q ue se llame al procedimiento. esto se debe a la forma en que los procedimientos se ejecutan.El microprocesador ejecuta las instrucciones del procedimiento 5.Se encuentra la llamada Call 2. Proc GotoXY xor bh.Se saca de la pila el valor original del IP y se continua el flujo del progr ama Un procedimiento se declara de la siguiente forma: PROC nombre instrucción instrucción .

a diferencia de los internos. .Y=10 Call Gotoxy .*********************************************************************** .EXTERN p ara indicar que el procedimiento que se va a usar está fuera del programa y .PUBLIC para declarar los procedimientos como públicos..Terminar y regresar al dos Int 21h . .04C00h .09h Int 21h Ret ENDP Imprime_Cad END Procedimientos internos Los procedimientos internos son aquellos que se declaran y se llaman dentro del mismo programa. es necesario que sean declarados co mo públicos en el programa donde se encuentran y que sean llamados como externos e n el programa donde serán usados.Procedimiento: Limpia_Pantalla .COMMENT * Programa: Proc2. Para lograr esto. en otras pa labras.Parámetros: La dirección de la cadena en DX .********************************************************************* . la llamada al procedimiento se encuentra en un programa y el procedimien to en otro.Parámetros: Dl=X. también son llamados procedimientos locales. Pass32 cuenta con tres directi vas de ensamble: .13.'$' . El listado anterior muestra la forma de utilizar procedimientos internos.X=20 Mov DH. Dh=Y . END INICIO .MODEL TINY . Procedimientos externos Los procedimientos externos.Bh Mov Ah.GotoXY: Coloca el cursor en las coordenadas especificadas Limpia_Pantalla: Limpia la pantalla Imprime_Cad: Imprime una cadena en la posición actual del cursor . Para poder utilizar procedimientos externos.CODE INICIO: .10 Lea DX.Punto de entrada al programa Mov DL.10.Procedimiento: GotoXY .DX->Cad1 Call Imprime_Cad .********************************************************************* PROC GotoXY Xor Bh.*********************************************************************** PROC Imprime_Cad Mov Ah. Descripción: Este programa ilustra la forma de utilizar procedimientos en los prog ramas por medio de la instrucción Call y la forma de pasarles parámetros.ASM Autor: Juan Carlos Guzmán C.02h Int 10h Ret ENDP GotoXY .'.GotoXY 20..Descripción: Coloca el cursor una posición especifica de la pantalla .cad1 .20 .DATA Cad1 db 'Esta es una cadena de prueba.Imprimir Cad1 Mov Ax.Descripción: Imprime una cadena de caracteres en la posición del cursor .10 .INCLU . se declaran en módulos o programas separados al programa donde el procedimiento es llamado.

lo cual indica al ensamblador que. .ASM contiene la línea .10 .ASM Autor: Juan Carlos Guzmán C..Y=10 Call GotoXY .PUBLIC Cad1 db 'Esta es una cadena de prueba.COMMENT * Programa: Proc2.04C00h .13.Y=10 Call Gotoxy .Cad1 y los procedimientos externos .DE para enlazar el programa que contiene los procedimientos con el programa que los llama.DATA Cad2 db 'Esta es una cadena de prueba 2. en este caso..ASM.'$' .'.. Pass32 proporciona grandes facilidades para el manejo de procedimientos. Primeramente.Incluir el archivo proc2.Punto de entrada al programa Mov Dl.el cual contiene la variable de cadena . Descripción: Este programa ilustra la forma de utilizar procedimientos en los prog ramas por medio de la instrucción Call y la forma de pasarles parámetros.cad1 . solamente Cad1 debe ser declarada como pública.X=20 Mov Dh. etiquetas o procedimient os externos. . END INICIO .Imprime Cad1 Mov AX.Imprimir Cad1 Mov Ax.MODEL TINY .X=20 Mov DH.Cad2 .asm Call Imprime_Cad . en caso de que se soliciten datos.INCLUDE Proc2.DX->Cad1 en Proc2.CODE INICIO: .usados en este programa.10.Imprime Cad2 Lea DX.. Descripción: Este programa ilustra la forma de utilizar procedimientos y datos ext ernos en los programas por medio de las directivas de inclusión include y public.DX->Cad1 Call Imprime_Cad .04C00h .'.ASM . el programa Proc3.GotoXY 20. .20 .Punto de entrada al programa Mov DL.asm .10 . El siguiente programa muestra el uso de las directivas de inclusión.asm Call Imprime_Cad . END INICIO END . puesto que los procedimient os se buscan y anexan automáticamente al programa que los llama si es que existen.COMMENT * Programa: Proc3.10 Lea DX.Descripción: Coloca el cursor una posición especifica de la pantalla .ASM Autor: Juan Carlos Guzmán C.DATA . el archivo Proc2.INCLUDE proc2.13.Cad1 .Terminar y regresar al dos Int 21h .********************************************************************* .Fin del programa Int 21h . .GotoXY 20.Parámetros: Dl=X.ASM se modificó para que su variable Cad1 fuera declarada como p ublica. Dh=Y .10 Lea DX.CODE INICIO: .********************************************************************* .DX->Cad2 en Proc3.'$' .20 .10.Procedimiento: GotoXY .MODEL TINY . éstos se busquen en el archivo incluido.

Punto de entrada al programa Call limpia_Pantalla ..Cad2 .24 .********************************************************************* .COMMENT Biblioteca de Procedimientos en Lenguaje ensamblador .COMMENT * Programa: Proc3.GotoXY 40.09h Int 21h Ret ENDP Imprime_Cad END Con estas capacidades.13.Imprime Cad2 Call Espera_Tecla .20 . El siguiente programa muestra la forma de escribir una biblioteca de procedimien tos y la forma de utilizarlos en los programas.'. es fácil crear bibliotecas de procedimientos y macros que p uedan ser utilizados constantemente por los demás programas.10 Lea DX. Call GotoXY .25 Lea DX. ahorrando con ello ti empo de programación al reutilizar código fuente.MODEL TINY . Call Imprime_Cad .Procedimiento: GotoXY .10 . . .*********************************************************************** PROC Imprime_Cad Mov Ah.*********************************************************************** .Fin del programa Int 21h .Descripción: Imprime una cadena de caracteres en la posición del cursor .Parámetros: La dirección de la cadena en DX .10.DX->Cad1 Call Imprime_Cad . Mov Dh.inc .Bh Mov Ah.'$' .04C00h . END INICIO END .Esperar por una tecla presionada Mov AX.02h Int 10h Ret ENDP GotoXY . Descripción: Este programa ilustra la forma de utilizar procedimientos y datos ext ernos en los programas por medio de las directivas de inclusión include y public.'$' Cad2 db 'Presiona una tecla.Cad1 y los procedimientos externos .GotoXY 20.el cual contiene la variable de cadena .CODE INICIO: ..'.inc .40 .X=20 Mov Dh.CODE ..DATA Cad1 db 'Esta es una cadena de prueba 2.Imprime Cad1 Mov Dl.Y=10 Call GotoXY . Mov Dl.PROC GotoXY Xor Bh.INCLUDE proclib..usados en este programa.ASM Autor: Juan Carlos Guzmán C.Procedimiento: Limpia_Pantalla . .Incluir el archivo proclib.Cad1 .

Procedimiento: Imprime_Cad .********************************************************************** .0600h mov bh.184fh int 10h Mov dx. Parámetros: Ninguno .0.10h int 16h Ret ENDP Espera_Tecla 7.********************************************************************** PROC Limpia_Pantalla mov ax. todo est o con el fin escribir programas más rápidos y eficientes.Procedimiento: Espera_Tecla .********************************************************************** PROC Espera_Tecla mov ah. Parámetros: La dirección de la cadena en DX .0000h mov dx. Turbo Pasca l cuenta con dos palabras reservadas: Assembler y Asm. Descripción: Limpia la pantalla de la computadora y coloca el cursor . Parámetros: Dl=X..0000h Call Gotoxy Ret ENDP Limpia_Pantalla .Bh Mov Ah. .********************************************************************* PROC GotoXY Xor Bh. la programación en lenguaje ensamblador proporciona un mayor co ntrol sobre el hardware de la computadora. Programación híbrida Pascal y ensamblador Como ya se mencionó. Descripción: Coloca el cursor una posición especifica de la pantalla . pero también dificulta la buena estruct uración de los programas.17h mov cx.*********************************************************************** .02h Int 10h Ret ENDP GotoXY . Descripción: Imprime una cadena de caracteres en la posición del cursor . La programación híbrida proporciona un mecanismo por medio del cual podemos aprovech ar las ventajas del lenguaje ensamblador y los lenguajes de alto nivel. .********************************************************************** .Procedimiento: Limpia_Pantalla . para esto. Descripción: Detiene la ejecución de un programa hasta que se presiona . una tecla . Dh=Y . En esta sección se mostrará la forma para crear programas híbridos utilizando el lengu aje ensamblador y Turbo Pascal. Parámetros: Ninguno . Turbo Pascal permite escribir procedimientos y funciones en código ensamblador e i ncluirlas como parte de los programas en lenguaje Pascal. en 0.*********************************************************************** PROC Imprime_Cad Int 21h Ret ENDP Imprime_Cad .

Var N1.N2. En el siguiente listado nos muestra la forma de escribir programas completos uti lizando procedimientos híbridos. Por otro lado.18h Mov CX. cuando la tecla es presionada. Asm nos permite incluir bloques de instrucciones en lenguaje ensa mblador en cualquier parte del programa sin necesidad de escribir procedimientos completos en ensamblador. ésta se utiliza para rellenar la pantalla. Asm Mov AX.N2.0000h Mov DX. El programa del listado 24 realiza la suma de dos cantidades enteras (N1 y N2) i ntroducidas previamente por el usuario. El programa solicita que se introduzcan dos número. {Este programa solicita al usuario que presione alguna tecla. Asm Mov AX. End. Writeln("Introduce un número: ")..Res). El procedimiento del listado 23 utiliza la función 06h de la Int 10h del BIOS para limpiar la pantalla.AX End. Writeln("El resultado de la suma es: ". Assembler. en el programa anterior se utilizan la s funciones Readln y Writeln para obtener y presentar información al usuario y dej amos los cálculos para las rutinas en ensamblador.184Fh Int 10h End. El programa termina cuando se presiona la tecla enter. programas que soliciten información o datos al usuario. Add AX.Assembler permite indicarle a Turbo Pascal que la rutina o procedimiento que se está escribiendo está totalmente escrita en código ensamblador.0600h Mov BH.. es decir . El lenguaje ensamblador no cuenta con funciones de entrada y salida formateada. después almacena el resultado en la variab le Res y finalmente presenta el resultado en la pantalla. Readln. Ejemplo de un procedimiento híbrido: Procedure Limpia_Pantalla. Begin Writeln("Introduce un número: "). Ejemplo de un programa con un bloque de instrucciones en ensamblador: { Este programa muestra como se construye un programa híbrido utilizando un bloque Asm. End. Readln(N2). por lo cual es muy complicado escribir programas que sean interactivos. Uses Crt.N1. Mov Res.Res : integer. Readln(N1). este procedimiento es análogo al procedimiento ClrScr de la unidad CRT de Turbo Pascal. Es aquí donde podemos expl otar la facilidad de la programación híbrida. El programa utiliza tres procedimientos: Limpia_Pantalla: Este se encarga de borrar la pantalla Cursor_XY: Este procedimiento reemplaza al GotoXY de Pascal .} Program hibrido. en Turbo Pascal. después calcula la suma por medi o de la instrucción Add de ensamblador y finalmente imprime el resultado en la pantalla.

Var Car: Char. End.24). Cursor_XY(0.17h Mov CX. Begin Limpia_Pantalla. {Este procedimiento tiene la misma función que el procedimiento GotoXY de Turbo Pa scal} Procedure Cursor_XY(X. If car <> #13 then Begin For i:=0 to 24 do For j:=0 to 79 do Begin Cursor_XY(j. Assembler. Asm Mov Ah. Asm Mov AX. End.Y Mov Dl. Imprime_Car(Car).0).0600h Mov Bh.j : integer. 8.0000h Mov DX.. Conclusión . {Este procedimiento imprime el carácter en la pantalla} Procedure Imprime_Car(C: Char).02h Mov Bh.C Int 21h End.i).Y: Byte). Limpia_Pantalla.Imprime_Car: Este procedimiento imprime en pantalla el carácter que se le pasa com o parámetro..02h Mov Dl. Until car = #13.X Int 10h End. Asm Mov Ah.184Fh Int 10h End.00h Mov Dh. Imprime_Car(Car). {Este procedimiento limpia la pantalla y pone blanco sobre azul} Procedure Limpia_Pantalla. Repeat Limpia_Pantalla. Write('Presiona enter para salir u otro para seguir. Uses Crt.'). i. Assembler. Readln. Assembler. } Program Hibrido2. Car:=ReadKey. Cursor_XY(30. Write('Introduce un carácter: ').

pero el lenguaj e ensamblador es y seguirá siendo una de las herramientas de programación más utilizad as por todas aquellas personas que desean tener un mayor grado de comprensión sobr e el funcionamiento a nivel de dispositivo de una computadora personal. y una muestra de ello es el ensamblador que se utilizó para probar los programas de ejemplo de este trabajo.Tal vez no sea el lenguaje de programación más sencillo de aprender. tal vez lo que descubra le haga cambiar de opinión. si alguien piensa que el lenguaje ensamblador ya pasó de moda. Por lo tanto. tal v ez debería reconsiderar su postura y visitar algunas de las páginas en Internet que se dedican a cubrir temas sobre programación en lenguaje ensamblador y que se actu alizan diariamente. El lenguaje ensamblador no está relegado únicamente a computadoras antiguas con sist emas operativos en modo texto como el MS-DOS. Existe en la actualidad una gran c antidad de programas ensambladores que nos permiten programar en ambientes opera tivos gráficos como Windows 95/98. Windows NT y Linux. .

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