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

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

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

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

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

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

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

02h .MACRO Nombre [(parametro1.llamada a la interrupción 21h del DOS Si necesitamos que en nuestro programa se muestren mensajes constantemente. se puede crear una macro para posicionar el cursor en difere . Ah.24 . y mientras más grande sea el programa. etc)] INSTRUCCIONES ENDM Nuevamente. De acuerdo con esto. DX.0 . parametro2.Usar la función 09h para imprimir cadenas Int 21h .Imprime Mensaje 21h . El principal problema que esto nos ocasiona es que el tamaño de nuestro programa c rece considerablemente.09h . ax.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.Y=24 Ah.Colocar cursor 10h .Cadena Mov Ah.Cadena .X=40 dh. El formato general de una macro es el siguiente: .MACRO Imprime_Cad(Cadena) Lea DX. Ah.40 .Direccionar la cadena Mov AH.Mensaje2 . más difícil será encontra r la causa de algún error cuando éste ocurra. lo que se encuentra entre paréntesis cuadrados es opcional. la macro para imprimir cadenas quedaría de la siguiente forma : .Pagina de video dl.Imprimir Mensaje2 21h .4C00h . Ah. La mejor solución en estos casos es el uso de las MACROS. por ejemplo. Inicio 5.Int Lea Mov Int Mov Mov Mov Mov Int Lea Mov Int Mov Int Mov Int END END 10h .09h . es o bvio que debemos duplicar este conjunto de instrucciones por cada mensaje que se desea enviar a pantalla.Mensaje .09h . 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). Bh. Una vez que la macro ha sido declarada. Por ejemplo el siguient e conjunto de instrucciones nos permite imprimir una variable de tipo cadena en la pantalla: Lea DX. 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.10h . Los parámetros permiten que una misma macro pueda ser usada bajo diferentes condic iones. DX.Terminar programa y salir al DOS 21h .Esperar tecla 16h . 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).

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

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

bh mov ah. seguida del nombre del procedimiento.Se encuentra la llamada Call 2. esto es porque un mismo procedimiento puede ser llamado varias v eces en el mismo programa y sólo requiere memoria una vez.El microprocesador ejecuta las instrucciones del procedimiento 5. El siguiente procedimiento coloca el cursor en las coordenadas establecidas en D l y Dh. el procedimiento se coloca en memoria para que pueda ser utilizado por el programa.. Las principales ventajas en el uso de procedimientos son: permiten una codificac ión más limpia y compacta. 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. por lo cual. 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. Paso de parámetros Los procedimientos en lenguaje ensamblador no cuentan con un mecanismo para el p aso de parámetros.6. Los procedimientos son muy simi lares a las macros. es decir el código fuente es más pequeño.. Este programa declara tres procedimientos: .El procedimiento termina cuando se encuentra la instrucción Ret 6. Llamada a procedimientos Los procedimientos son llamados por los programas por medio de la instrucción CALL .. A continuación se presentan los pasos necesarios para ejecutar un procedimiento: 1. 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.... Proc GotoXY xor bh. también permiten el ah rro de memoria. Un procedimiento se declara una sola vez en el código fuente y cuando el programa se ensambla y ejecuta...Se coloca en el IP el valor del desplazamiento correspondiente al Procedimie nto 4. RET ENDP NOMBRE En donde PROC es una palabra reservada que indica el inicio de un procedimiento..02h int 10h Ret Endp GotoXY En este ejemplo. Los procedimientos tienen la desventaja de que reducen la velocidad de ejecución d e los programas. 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. Ejemplo: Call GotoXY El siguiente programa muestra la forma de pasarle parámetros a los procedimientos por medio de los registros generales.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 .El microprocesador almacena en la Pila el contenido del IP 3.

Procedimiento: Limpia_Pantalla .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 .X=20 Mov DH. la llamada al procedimiento se encuentra en un programa y el procedimien to en otro.Y=10 Call Gotoxy . 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.Descripción: Imprime una cadena de caracteres en la posición del cursor . Para poder utilizar procedimientos externos.cad1 .********************************************************************* PROC GotoXY Xor Bh.GotoXY 20.CODE INICIO: .10.Bh Mov Ah.Terminar y regresar al dos Int 21h .10 Lea DX.DX->Cad1 Call Imprime_Cad .02h Int 10h Ret ENDP GotoXY . Procedimientos externos Los procedimientos externos.********************************************************************* .'$' .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.. en otras pa labras.DATA Cad1 db 'Esta es una cadena de prueba. .*********************************************************************** PROC Imprime_Cad Mov Ah. a diferencia de los internos.COMMENT * Programa: Proc2.ASM Autor: Juan Carlos Guzmán C. El listado anterior muestra la forma de utilizar procedimientos internos.Punto de entrada al programa Mov DL.10 .MODEL TINY . Para lograr esto.Parámetros: La dirección de la cadena en DX .*********************************************************************** . Pass32 cuenta con tres directi vas de ensamble: . se declaran en módulos o programas separados al programa donde el procedimiento es llamado.Procedimiento: GotoXY .Parámetros: Dl=X. .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. Dh=Y .13.Descripción: Coloca el cursor una posición especifica de la pantalla .Imprimir Cad1 Mov Ax.20 . 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.04C00h .'.. END INICIO . también son llamados procedimientos locales.INCLU .

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

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

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

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

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

Por lo tanto.Tal vez no sea el lenguaje de programación más sencillo de aprender. 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. y una muestra de ello es el ensamblador que se utilizó para probar los programas de ejemplo de este trabajo. tal vez lo que descubra le haga cambiar de opinión. 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. si alguien piensa que el lenguaje ensamblador ya pasó de moda. Windows NT y Linux. . 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.

Sign up to vote on this title
UsefulNot useful