Вы находитесь на странице: 1из 10

INSTITUTO TECNLOGICO DE ZACATEPEC Fecha De Entrega

Fecha de Entrega: 13 de Diciembre del 2011.

Proyecto Final de la Materia de Lenguaje Ensamblador.

INSTITUTO TECNLOGICO DE ZACATEPEC.

Ttulo del Proyecto: Lector De Un Archivo, Previamente Abierto Especificando Una Direccin Por Teclado. Lenguaje Ensamblador Grupo BB. Integrantes de Equipo: *Damin Lpez Miguel Angel *Tolentino * * * #9

Introduccin.
El proyecto en cuestin es un programa realizado en lenguaje ensamblador para microprocesadores 8086 y posteriores que fue compilado mediante el TASM de Turbo Assembly 4.0 y ensamblado mediante el TLINK de la misma paquetera. El programa generado, tiene la funcionalidad de abrir un archivo mediante la interrupcin int 21h con la funcin 3DH, as como para leerlo mediante la funcin 3FH.As pues el programa funge en cuestin como un lector de archivos de texto mediante la pantalla de MSDOS. Su principal funcionalidad es abrir dicho archivo de texto almacenado en cualquier lugar de la pc ; as pues tras su ejecucin lanza un primer mensaje para pedir que se ingrese la direccin del archivo que se va a abrir y posteriormente se abrir mediante las funciones antes comentadas de la interrupcin 21h. El proyecto en cuestin fue realizado para la clase de lenguaje Ensamblador y representa el final porcentaje final de la materia.

Objetivos.
*Realizar un programa en ensamblador que sirva para abrir un archivo almacenado en la PC. *Agregar al programa realizado la opcin para leer el archivo tal y como se encuentra almacenado y que permita leer saltos de texto y otros caracteres. *Especificar la direccin del archivo que se va abrir, que ser pedida por teclado y podr ser de cualquier direccin que sea correcta dentro del Sistema Operativo.

Desarrollo.
.MODEL SMALL; DECLARACIN DEL TIPO DE MEMORIA A UTILIZAR. .STACK 64; RESERVAR EN LA PILA EL ESPACIO DE MEMORIA. .DATA; ALMACENAR EN EL SEGMENTO DE MEMORIA. MAXLENGTH DB 255; VARIABLE MAXIMO LONGITUD DE CADENA. ACTUALLENGTH DB?; VARIABLE ESTADO ACTUAL DE LONGITUD DE CARACTERES. ARCHIVO DB 255 DUP (?); VARIABLE ARCHIVO ALMACENADO. BUFFER DB 100 DUP (?), '$'; BUFFER QUE SE ALMACENA EN LA PILA PARA PODER LEER EL ARCHIVO. ERRORABRIRARCHIVO DB 'NO EXISTE EL FICHERO...','$'; MENSAJE 1. ERRORLECTURA DB 'NO SE PUEDE LEER EL ARCHIVO...','$'; MENSAJE 2. MENSAJE DB 'DIRECCION DEL ARCHIVO QUE SE ABRIRA:', 10,13, '$'; MENSAJE 3. .CODE; INICIO DEL PROGRAMA MAIN PROC FAR; PROCEDIMIENTO DE TIPO FAR (LEJANO) INTERNO. MOV AX, SEG MAXLENGTH; PARA PODER ABRIR EL ARCHIVO ES NECESARIO PASARLE AL REGISTRO AX LA CANTIDAD DE CARACTERES DE CADENA QUE SE CONTEMPLA EN LA VARIABLE MAXLENGTH. MOV DS, AX; LE PASAMOS LO QUE TIENE AX AL REGISTRO DE SEGMENTO DE DATOS. MOV AH, 09H; LLAMAMOS EL PRIMER MENSAJE MEDIANTE LA FUNCIN 09H. LEA DX, MENSAJE; LEEMOS EL MENSAJE Y LO IMPRIMIMOS EN PANTALLA. INT 21H; INTERRUPCIN 21H.

MOV AH, 0AH; CON LA FUNCIN OAH PEDIMOS QUE SE INGRESEN LOS CARACTERES EN ESTE CASO, LA DIRECCIN DONDE SE ENCUENTRA EL ARCHIVO QUE SE ABRIR. LEA DX, MAXLENGTH; LEE EL ARCHIVO MXIMO 255 CARACTERES. INT 21H; INTERRUPCIN INT 21H. MOV AL, ACTUALLENGTH; PASAMOS A LA PARTE ALTA LA POSICIN ACTUAL DE CARACTERES DE CADENA LEIDOS. XOR AH, AH; SE HACE UNA COMPARACIN LGICA XOR DE CARCTER POR CARCTER PARA PODER LEER UN CADENA COMPLETA DEL ARCHIVO COMPLETO ABIERTO. MOV SI, AX; MOVEMOS EL CONTENIDO DE AX AL REGISTRO INDIC DE FUENTE. MOV ARCHIVO [SI], 0; MOV AH, 3DH; EJECUTAMOS LA FUNCIN 3DH PARA ABRIR EL ARCHIVO. XOR AL, AL; HACEMOS UNA COMPARACIN LGICA XOR. LEA DX, ARCHIVO; LEEMOS EL ARCHIVO QUE SE ABRIR. INT 21H; INTERRUPCIN INT 21H. JC OPENERROR; EN CASO DE HABER UN ERROR DE ABRIR EL ARCHIVO SALTA A UNA ETIQUETA QUE INDICA EL FALLO AL ABRIR DICHO ARCHIVO. MOV BX, AX; MOVEMOS EL CONTENIDO DE AX AL REGISTRO BX. REPETIR: ETIQUETA QUE INDICA EL BUFFER DE DATOS PARA LEER CADENA POR CADENA DEL ARCHIVO ABIERTO. MOV AH, 3FH; LLAMAMOS A LA FUNCIN 3FH QUE SIRVE PARA LEER UN ARCHIVO DE TEXTO SOPORTADO. LEA DX, BUFFER; LEEMOS EL BUFFER CARGADO ANTERIORMENTE. MOV CX, 100; Y PASAMOS EL VALOR DE 100 AL CONTADOR. INT 21H; INTERRUPCIN INT 21H. JC READERROR; ERROR DE LECTURA! MOV SI, AX; PASAMOS LO QUE TIENE EL REGISTRO AX A SI. MOV BUFFER [SI], '$'; ALMACENAMOS POSICIN DE LECTURA LEIDA DEL DOCUMENTO AL BUFFER. MOV AH, 09H; LLAMAMOS A LA FUNCIN 09H. INT 21H; DE LA INTERRUPCIN 21H. CMP SI, 100; COMPARAMOS SI LO QUE TIENE SI ES IGUAL AL VALOR DEL CONTADOR JE REPETIR; Y SI ESTO ES CORRECTO VOLVEMOS A LA ETIQUETA REPETIR Y SE FORMA UN CICLO, ESTO HASTA QUE SE TERMINE DE LEER LOS CARACTERES DEL ARCHIVO ABIERTO CON ANTERIORDAD.

JMP FIN; JUMP TERMINA OPENERROR: ETIQUETA QUE INDICA UN ERROR DEL ARCHIVO AL ABRIRSE. MOV AH, 09H; LLAMAMOS A LA FUNCIN 09H. LEA DX, ERRORABRIRARCHIVO; Y LEEMOS EL MENSAJE 3 DE ERROR AL ABRIR ARCHIVO, EL ARCHIVO NO SE ENCUENTRA EN LA DIRECCIN ESPECIFICADA POR TECLADO. INT 21H; INTERRUPCIN INT 21H. JMP FIN; HACEMOS UN SALTO A LA ETIQUETA FIN. READERROR: ETIQUETA QUE HACE REFERENCIA AL ERROR DE LECTURA DE UN ARCHIVO DE TEXTO QUE NO SE PUEDE ABRIR. MOV AH, 09H; MEDIANTE LA FUNCIN 09H VISUALIZAMOS LA CADENA DE CARACTERES. LEA DX, ERRORLECTURA; LEEMOS EL MENSAJE 2 E IMPRIMOS EN PANTALLA. INT 21H; FUNCIN INT 21H. FIN: ETIQUETA QUE HACE REFERENCIA AL FIN DEL CUERPO DEL PROGRAMA. MOV AX, 4C00H; FUNCIN 4C00H QUE SIRVE PARA FINALIZAR EL PROGRAMA. INT 21H; FUNCIN INT 21H. MAIN ENDP; FIN DEL PROCEDIMIENTO INTERNO. END MAIN; FIN DEL PROGRAMA.

Pantallazos.
1.-EL programa pide introducir desde el teclado la direccion del archivo que se va mostrar en pantalla.

2.-Si el archivo no existiera nos mandaria el siguiente mensaje de error.

*Prueba de abertura de otras direcciones donde no se encuentra el archivo propio a abrir (mensajes de error).

3.-A continuacin nos muestra el contenido del archivo en la pantalla. El archivo que se abri en la captura de pantalla de abajo es con extensin .asm.

4.-A continuacin se muestra con una extensin de archivo .txt.

Conclusiones.
Funcin 3Fh utiliza un bfer del sistema al leer desde un dispositivo y despus transfiere el nmero de caracteres que desee en un bfer de memoria especificado por el programa de llamada. El bfer utilizado por la funcin 3Fh no es el mismo que utilizan MS-DOS o de otras funciones que leen el teclado (01 h, 06 h, h 07, 08 h, 0Ah y funciones 0Ch). Funcin 3Fh mueve caracteres del bfer de entrada para el programa proporcionado el rea de datos hasta que el nmero de caracteres solicitados se ha ledo o, si se lee desde el teclado, hasta que alcanza un retorno de carro. Cuando se escriben ms caracteres que solicitado desde el teclado, el nmero solicitado se devuelven al programa, pero no se vaca el bfer de entrada. Esto puede causar posteriores operaciones de lectura devolver con datos no vlidos o no deseados. Esto puede ocurrir incluso entre instancias independientes de la ejecucin del programa.

Referencias.
IBM PC: Assembly Language and Programming.Autor: Peter Abel.Editorial Lester.Pgina Referencia 32.

Assembly: Programming and the 8086 Microprocessor.Autor: Douglas Samuel Jones.Pgina Referencia 159.

Вам также может понравиться