LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 PRÁCTICA 5 COPIAR UN ARCHIVO EXISTENTE EN UNO NUEVO CON DISTINTO NOMBRE Y EXTENSIÓN 1. INTRODUCCIÓN Esta práctica nos sirve para copiar un archivo existente a un archivo nuevo con diferente nombre y extensión, sin alterar su contenido. Para copiar un archivo a otro se usará el siguiente formato: C:\CALCA Nombarchivo1.Ext1 Nombarchivo2.Ext2 Donde: Nombarchivo1 Ext1 Nombarchivo2 Ext2 = = = = Nombre del archivo fuente Extensión del archivo fuente Nombre del archivo destino Extensión del archivo destino El programa CALCA exhibe los errores de acceso al disco, cuando el archivo no se encuentra, cuando no hay memoria en el disco o cuando el disco está protegido. Todos los mensajes se encuentran en un procedimiento. 2. OBJETIVOS 2.1. El alumno aprenderá a usar las interrupciones del DOS para abrir y cerrar archivos. 2.2. El alumno utilizará las funciones del DOS para leer y escribir archivos. 2.3. El alumno manejará cualquier tipo de error de acceso a un disco. 2.4. El alumno sabrá sacar un directorio de archivos AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-1 LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 3. DESARROLLO 3.1. Capturar el siguiente módulo, ensamblarlo y guardarlo en la librería REM con el nombre ERRDISCO.ASM. %TITLE ‘TRATAMIENTO DE ERRORES DE ACCESO A DISCO’ IDEAL DOSSEG MODEL DATASEG CadError err00 err01 err02 err03 err04 err05 err06 err07 err08 err09 err0A err0B err0C err0D err0E err0F err10 err11 err12 err13 err14 err15 err16 err17 err18 err19 err1A err1B err1C err1D err1E err1F errores DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DB DW DW DW DW ‘-- ERROR --‘,0 ‘CAUSA DESCONOCIDA….’,0 ‘MAL NÚMERO DE FUNCIÓN’,0 ‘ARCHIVO NO HALLADO…’,0 ‘CAMINO NO HALLADO…’,0 ‘DEMASIADOS ARCHIVOS ‘,0 ‘ACCESO DENEGADO…’,0 ‘HANDLE DE ARCHIVO ILEGAL ‘,0 ‘BLOQUES DE MEMORIA DESTRUIDOS’,0 ‘NO HAY SUFICIENTE MEMORIA’,0 ‘MAL DIRECCIÓN DE MEMORIA…’,0 ‘AMBIENTE DAÑADO…’,0 ‘FORMATO ILEGAL…’,0 ‘CÓDIGO DE ACCESO MAL’,0 ‘DATOS INCORRECTOS…’,0 ‘CAUSA DESCONOCIDA…’,0 ‘CAUSA DESCONOCIDA…’,0 ‘NO SE PERMITE REMOVER EL DIRECTORIO’,0 ‘DISPOSITIVO NO ES EL MISMO…’,0 ‘NO SE PERMITEN ARCHIVOS…’,0 ‘DISCO PROTEGIDO CONTRA ESCRITURA…’,0 ‘UNIDAD DESCONOCIDA…’,0 ‘IMPULSOR NO LISTO…’,0 ‘COMANDO DESCONOCIDO’,0 ‘ERROR DE DATOS (REDUNDANCIA)’,0 ‘LARGO DE ESCRITURA INADECUADA’,0 ‘ERROR DE BÚSQUEDA…’,0 ‘TIPO DE MEDIO DESCONOCIDO…’,0 ‘SECTOR NO ENCONTRADO…’,0 ‘IMPRESORA NO TIENE PAPEL…’,0 ‘ERROR DE ESCRITURA EN EL DISCO’,0 ‘ERROR DE LECTURA EN EL DISCO…’,0 ‘FALLA GENERALIZADA…’,0 err00,err01,err02,err03,err04,err05,err06,err07 err08,err09,err0A,err0B,err0C,err0D,err0E,err0F err10,err11,err12,err13,err14,err15,err16,err17 err18,err19,err1A,err1B,err1C,err1D,err1E,err1F CODESEG AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-2 LENGUAJE ENSAMBLADOR 80386 ; PRÁCTICA 5 De CADENAS.OBJ EXTRN NuevaLinea:proc, SacaCadena:proc PUBLIC ErrDisco ESCRIBE MENSAJE DE ERROR A LA SALIDA ESTÁNDAR ;ErrDisco ; ;Entrada: ;Salida: ;Registros: Ninguna CF = 1, tras una operación de archivo en DOS) Ninguna, se exhibe el mensaje de error AX, BP, CX, DX, DI, SI PROC ErrDisco push push mov int xor pop cmp Jbe xor ds es ah,59h 21h bx,bx es ds ax,1fh @@10 ax,ax ;Salva registros de ;segmento ;Número de función de DOS ;Trae información de DOS ;Debe ser 0 ax,1 bx,ax di,[errores+bx] di NuevaLinea di,offset CadError SacaCadena di SacaCadena NuevaLinea ;*2 ;Copia en BX ;Pone dirección de la cadena ;Guarda DI ;Empieza otra línea ;Apunta a 1ª. parte del mensaje ;¿AX > 1fh? ;Brinca si AX ≤ 1fh ;Usa ‘CAUSA DESCONOCIDA’ @@10: shl mov mov push call mov call pop call call ret ENDP ;Recobra ;Exhibe mensaje ;Exhibe otra línea ErrDisco END ;Fin de módulo ERRDISCO.ASM Primero salvamos los registros DS y ES. Guardamos 58h en el registro AH, esto es para utilizar el servicio 58h de la interrupción 21h. Hacemos que el registro BX sea cero, posteriormente llamamos a la interrupción 21h. Al usar este servicio el código de error ampliado es devuelto al registro AX. Recuperamos registros DS y ES. Comparamos el registro AX con el valor 1fh, si AX es mayor que 1fh quiere decir que no hubo error, por lo tanto hacemos que AX sea cero. Caso contrario se exhibe el mensaje apropiado. AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-3 LENGUAJE ENSAMBLADOR 80386 3.2. PRÁCTICA 5 Capturar y ensamblar el siguiente programa mediante CALCA.ASM. %TITLE ‘COPIA UN ARCHIVO EN OTRO, PIDE CONFIRMAR SOBRE ESCRITURA’ IDEAL DOSSEG MODEL SNACK rc nl EQU EQU small 256 13 10 ;ASCII de retorno ;ASCII para nueva línea DATASEG ClaveFin ArchEnt ArchSal Pagina DB DW DW DB 0 0 0 256 dup (¿) Apronta DiscoLleno Notas DB DB DB DB DB DB DB rc,nl,”Archivo de salida existe. ¿Sobre escribir? (s/n)”,0 rc,nl,”—ERROR: Disco lleno”,0 rc,nl,”CALCA copia todos los bytes de un archivo a” rc,nl,”un nuevo archivo, como demostración de los” rc,nl,”métodos para leer y escribir archivos en” rc,nl,”lenguaje ensamblador. Ejemplo de uso:”,rc,nl rc,nl,”CALCA <Arch1> <Arch2>”,rc,nl,0 ;Para reportar error ;Handel del archivo fuente ;Handel del archivo salida ;Byte variable de E/S CODESEG ; De CADENAS.OBJ EXTRN ; De ERRDISCO.OBJ EXTRN ; SacaCadena:proc,NuevaLinea:proc ErrDisco:proc De PARAMS.OBJ EXTRN TraePar:proc,CuentaPar:proc,TraeUnPar:proc Inicia: mov mov call call cmp Je mov call jmp ax,@data es,ax TraePar CuentaPar dx,2 @@10 di,offset notas SacaCadena salir AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS ;AX apunta al segmento de datos ;ES tiene dicho valor ;Trae parámetro del PSP ;Trae número de parámetros dados ;¿Es de 2? ;Sí, salta a CALCAR ;Apunta al texto con DI ;Despliega aclaración ;Fin del programa 5-4 LENGUAJE ENSAMBLADOR 80386 ; PRÁCTICA 5 Intenta abrir el archivo de entrada @@10: xor call mov xor int jnc jmp : cx,cx TraeUnPar dx,di al,al 21h @@20 errores ;Parámetro inicial ;Trae dirección de cadena del parámetro ;Apunta a nombre de archivo con DS:DX ;Especifica sólo lectura ;Intenta abrir ;Brinca si lo abrió ;Caso contrario, a trato de error Comprueba si el archivo de salida existe @@20: mov mov call mov call Jc call call je jmp ; [ArchEnt],ax cx,1 TraeUnPar dx,di ArchExiste @@30 SacaCadena Confirma @@30 salir ;Salva andel del archivo fuente ;Parámetro secundario ;Trae dirección de cadena del parámetro ;Le apunta con DS:DX ;¿Existe el archivo destino? ;No, brinca ;Exhibe nombre del archivo ;Previene y pide confirmar ;Salta si hay permiso ;Si no, se sale Intenta crear el archivo de salida @@30: mov call mov xor mov int jnc jmp cx,1 TraeUnPar dx,di cx,cx ah,3ch 21h @@40 errores ;Trae parámetro secundario ;Trae su dirección ;La pone en DS:DX ;Atributos normales ;Función de DOS para crear archivo ;Crea archivo de entrada ;Brinca si no hubo error ;Sí, a tratamiento de error [ArchSal],ax ;Salva andel del archivo destino bx,[ArchEnt] ah,3fh cx,256 dx,offset Pagina 21h @@60 errores ;Pone andel en BX ;Función de DOS para leer un archivo ;Lee 256 bytes a lo más ;Buffer de entrada en DS:DX ;Que DOS lea el archivo ;Brinca si no hubo error @@40: mov @@50: mov mov mov mov int jnc jmp AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-5 LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 @@60: or jz mov mov mov mov int jnc jmp ax,ax @@80 cx,ax ah,40h bx,[ArchSal] dx,offset Pagina 21h @@70 errores ;Verifica si llego al final ;Sí, brinca ;Pone número de bytes a escribir ;Función de DOS para escribir archivo ;Pone andel en BX ;Apunta al buffer ;Intenta escribir ;Brinca si no hubo errores ax,ax @@50 ;Verifica si condición de disco lleno ;Lo exhibe @@70: or jnz ; maneja el caso especial de disco lleno mov call ; di,offset DiscoLleno SacaCadena ;Apunta al mensaje ;Lo exhibe procede a cerrar ambos archivos @@50: mov mov int mov mov int jnc jmp bx,[ArchEnt] ah,3eh 21h bx,[ArchSal] ah,3eh 21h salir errores ;Cierra fuentes ;Función de DOS de cerrar archivo ;Cierra archivo ;Cierra destino ;Función de DOS de cerrar archivo ;Cierra archivo ;Sale si no hubo errores mov mov int ah,4ch al,[ClaveFin] 21h ;Función de DOS para terminar programa Salir: ; ; ;DOS termina el programa Aquí se manejan los errores de E/S, que causan que el programa acabe después de sacar un mensaje alusivo Errores: mov call jmp [ClaveFin],al ErrDisco salir AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS ;Salva código de error ;Exhibe tipo de error 5-6 LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 PRUEBA SI EL ARCHIVO DE SALIDA YA EXISTE ;ArchExiste ; ;Entrada: ;Salida: ; Registros: DS:DX apunta a cadena ASCIIZ con nombre de archivo CF = 0 si el archivo existe CF = 1 si no existe o hubo error de acceso AX, BC PROC ArchExiste xor mov int jc mov mov int clc al,al ah,3dh 21h @@99 bx,ax ah,3eh 21h ;Función de DOS para abrir archivo ;Cierra archivo por precaución ;usando a DOS @@99: ret ENDP ArchExiste ;Confirma ; ;Entrada: :Salida: ; Registros: OBTIENE RESPUESTA SI/NO DEL USUARIO Ninguna ZF = 0 si usuario tecleó N o n ZF =1 si usuario tecleó S o s AX, CX (indirectamente), DI; PROC Confirma mov call mov int or cmp je cmp je jmp di,offset apronta SacaCadena ah,1 21h al,20h al,’s’ @@99 al,’n’ @@20 Confirma ;Apunta a cadena aprontadora ;Exhibe dicha cadena ;Función de DOS para recibir ;Un carácter desde el teclado ;Lo hace minúscula ;¿Recibió S o s? ;Si, brinca ;¿Recibió N o n? ;Si, brinca ;Reintenta al,’@’ ;Hace ZF = 0 @@20: cmp AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-7 LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 @@99: ret ENDP Confirma END En este programa básicamente utilizamos los servicios 3DH, 3EH, 3FH y 40H de la interrupción 21h. Estos servicios corresponden a, respectivamente, abrir, cerrar, leer y escribir archivos. 3.3. Hacer ejecutable el programa anterior mediante los siguientes comandos: C:\TASM /zi CALCA C:\TLINK /v CALCA,,,REM Si no tiene el archivo TLINK, puede teclear: C:>LINK CALCA,,,REM 3.4. Correr el programa mediante: C:\CALCA Arch1.Ext Arch2.Ext 3.5. Ejecutar el siguiente paso y observar lo que pasa. C:\CALCA SONY.ASM SANYO.ASM 3.6. Capturar los procedimientos siguientes y formar el módulo DIRECL.ASM: %TITLE “OBTIENE Y EXHIBE UN DIRECTORIO” IDEAL DOSSEG MODEL NomArch EQU small 30 ;Sesgo para nombrar el archivo 0 0 ¿ 43 DUP (¿),0 ‘ ‘,0 ;Apunta a fila del cursor ;Apunta a columna del cursor ;Segmento de área de transferencia de datos ;Tiene una entrada de directorio DATASEG Fila3 Col3 segDTA segDTA Blanky DB DB DW DB DB AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS ;Cadena con blancos 5-8 LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 CPDESEG PUBLIC ; De PARAMS.OBJ EXTRN ; TraePar:proc,CuentaPar:proc,TraeUnPar:proc De CADENAS.OBJ y MANCADE.OBJ EXTRN ; Direc LargoCad:proc,SacaCadena:proc,NuevaLinea:proc De VIDEO.OBJ EXTRN PanPoneCad:proc,PanirXY:proc ;Direc ; ;Entrada: LISTA DIRECTORIO TIPO /W PROC Direc mov mov mov call ret ENDP DS:DI apunta a cadena especificadora [Fila3].0 [Col3],0 bx,offset Accion MotorDir ;Cursor en el origen ;Forma apuntador a rutina de acción ;Llama a la máquina Direc PUBLIC ;MotorDir ; ;Entrada: MotorDir “MÁQUINA” PARA EXAMINAR DIRECTORIO ;Salida: ;Registros: CS:DI = dirección de subrutina DS:DI = dirección de cadena ASCIIZ de búsqueda Rutina en CS:BX ejecutada para cada coincidencia AX, CX, DX + otro que usase rutina en CS:BX PROC MotorDir push push mov int mov mov pop pop es bx ah,2fh 1h [segDAT],es [sesDTA],bx bx es AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS ;Salva registros que usa la función ;2Fh de DOS ;Función para traer DTA ;con DOS ;Salva dirección de segmento ;y sesgo de DTA ;Restaura 5-9 LENGUAJE ENSAMBLADOR 80386 ; PRÁCTICA 5 Fija un nuevo DTA en la variable global de 43 bytes DatosDir mov mov int ; dx,offset DatosDir ah,1ah 21h ;DS:DX apunta a la variable ;número de función para fijar DTA Examina directorio para hallar coincidencias con cadena en DS:DX mov mov mov jmp ah,4eh cx,10h dx,di short @@20 ;Función de DOS para primera coincidencia ;Atributo –archivo + subdirectorios ;DS:DX apunta a cadena ;Omite siguiente asignación a AH ah,4fh ;DOS busca siguientes coincidencias 21h @@99 bx @@10 ;Busca 1ª /siguiente coincidencia ;Sale si error o acabó ;llama a rutina de acción @@10: mov @@20: int jc call jmp ; restaura DTA original @@99: push mov mov mov int pop ret ENDE ds ds,[segDTA] dx,[sesDTA] ah,1ah 21h ds ;Preserva DS actual ;Pone dirección anterior del DTA en ;DS:DX ;Usa esta función otra vez MotorDir PUBLIC ;Accion ; ;Entrada: ;Salida: ;Registros: PROC push mov mov call Accion EXHIBE LOS NOMBRES DE ARCHIVOS QUE COINCIDEN DatosDir = entrada del directorio (llenada por DOS) Despliega nombre de arch/subdirectorio AH, DL, CX, DI Accion bx di,offset DatosDir+NomArch ;Apunta al nombre del archive si,di LargoCad AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-10 LENGUAJE ENSAMBLADOR 80386 push mov mov push call pop pop add mov sub neg call add cmp Jb mov inc PRÁCTICA 5 cx dl,[Col3] dh,[Fila3[ dx PanPoneCad dx cx dl,cl si,offset Blanky cx,16 cx PanPoneCad [Col2],16 [Col3],80 @@20 [Col3],0 [Fila3] ;Prepara posición del cursor ;Salva posición ;Usa rutina de exhibir ;Recupera posición del cursor ;Recobra lardo de cadena ;La suma a posición del cursor ;Apunta a cadena de espacios ;Calcula cuántos blancos ;Pone espacios ;Actualiza columna ;¿Llegó al borde? ;No, brinca ;Pone columna 0 ;Incrementa hilera @@20: pop ret ENDE bx Accion END 3.7. ;Fin del módulo DIRECL.ASM Ensamblar el módulo anterior y ponerlo en librería REM: C:\SEM386>tasm /zi direcl C:\SEM386>tlib rem -+ direcl 3.8. Capturar los procedimiento siguientes y ponerlos en módulo VIDEO.ASM. %TITLE ; “RUTINAS DE SALIDA A PANTALLA DE vides MAPEADO A MEMORIA” Usar siempre IniciaPan antes de emplear estas rutinas IDEAL DOSSEG MODEL FilaMax ColMax BaseMono BaseNormal ; EQU EQU EQU EQU small 25 80 0b000h 0b800h ;Número máximo de filas exhibidas ;Número máximo de columnas exhibidas ;Dirección de segmento de RAM para mono ;Para CGA y VGA Byte de atributo y máscaras para el AND RECORD ByteAtrib Dest:1,Fondo:3,Brillo:1,Frente:3 mascDest EQU MASK Dest AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS ;Máscara para destello 5-11 LENGUAJE ENSAMBLADOR 80386 mascFondo mascBrillo mascFrente EQU EQU EQU PRÁCTICA 5 MASK Fondo MASK Brillo MASK Frente ;Máscara para color de fondo ;Máscara para intensidad ;Máscara para color de frente DATASEG Atributo BaseVid ; ByteAtrib <0,0,7> DW BaseNormal ;Atributo por omisión ;Dirección de RAM de video FilaPan: arreglo de sesgos (desde BaseVid) en RAM de video BytesPorFila = ColMax*2 Fila =0 LABEL FilaPan Word REPT FilaMax DW (Fila*BytesPorFila) Fila = Fila+1 ENDM CODESEG PUBLIC PanlrXY, PanLeeXY, PanPoneCar, PanPoneCad, PanLimpRect PREPARA DIRECCIONAMIENTO A RAM DE VIDEO ;PoneDirVid ; ;Entrada: ; Salida: ; ;Registros: DH = fila (la línea superior es 0) DL = columna (extremo izquierdo es 0) ES:DI = dirección de RAM de video PROC PoneDirVid mov xor mov shl mov push mov int xor shl shl shl add pop xor shl add ret NOTA: DH y DL no son verificados BX, DX, DI, ES, rutina privada para PanPoneCar, PanPoneCad es,[BaseVid] bh,bh bl,dh bx,1 di,[FilaPan+bx] ax ah,15 10h bl,bl bx,1 bx,1 bx,1 di,bx ax dh,dh dx,1 di,dx AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS ;ES = dirección de segmento de video ;BH = 0 ;BL = fila ;Multiplica fila por 2 ;DI = dirección para buffer de fila ;Trae página active en BH ;Página * 4096 ;Columna a palabra de 16 bits ;Multiplica columna por 2 ;Suma sesgo de columna al de fila 5-12 LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 ENDP PoneDirVid ;PanlrXY ; ;Entrada: FIJA LA POSICIÓN DEL CURSOR ;Salida: ;Registros: DH = fila (0, la de arriba) DL = columna (0, la primera El cursor se reposiciona en la página actual Ninguno PROC PanlrXY push push mov int mov int pop pop ret ax bx ah,15 10h ah,2 10h bx ax ;Salva registros usados ;Pone número de página de BH ;Usando el BIOS ;Función del BIOS para fijar ;el cursor ENDP PanlrXY ;PanLeeXY ; ;Entrada: ;Salida: OBTIENE LA POSICIÓN DEL CURSOR ;Registros: Ninguna DH = fila (24, la inferior) DL = columna (79, la última) DX PROC PanLeeXY push push push mov int mov int pop pop pop ret ENDP ax bx cx ah,15 10h ah,3 10h cx bx ax ;Salva lo que usa ;Trae página de video a BH ;Con servicio a video del BIOS ;Función del BIOS para leer ;La posición del cursor ;Repone todo PanLeeXY AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-13 LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 COLOCA UN CARÁCTER EN LA PANTALLA ;PanPoneCar ; ;Entrada: ; ;Salida: ;Registros: AL = ASCII del carácter a desplegar DH = fila, DL = columna Carácter en AL es exhibido en la pantalla AX, BX, DX, DI no revisa a DH ni a DL PROC PanPoneCar push es call PoneDirVid mov ah,[atributo] stosw popes ret ;Salva registro de segmento ES ;Prepara ES:DI ;Atributo en AH ;Exhibe atributo y carácter ;Recobra ES ENDP PanPoneCar ;PanPoneCad ; ;Entrada: ; ; ;Salida: ;Registros: COLOCA UNA CADENA EN LA PANTALLA CX = número de caracteres a escribir DX = fila, DL = columna (no verifica valores) DS:DI = dirección de la cadena Exhibe la cadena en la pantalla AX, BX, CX, DX, DI, SI PROC PanPoneCad push es call PoneDirVid mov ah,[atributo] cld ;Salva ES ;Prepara ES:DI ;Atributo en AH @@10: lodsb stosw loop @@10 pop es ret ENDP ;Pone siguiente carácter en AL ;Exhibe atributo y carácter ;Ajusta contador CX ;Repone PanPoneCad LIMPIA ÁREA RECTANGULAR EN LA PANTALLA ;PanLimpRect ; ;Entrada: ; ;Salida: ;Registros: CH, CL = fila, columna de esquina superior izquierda DH, DL = fila, columna de esquina inferior derecha Se limpia el rectángulo definido AX, BX PROC PanLimpRect push bx AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-14 LENGUAJE ENSAMBLADOR 80386 mov mov mov int ret PRÁCTICA 5 ah,6 al,0 bh,[atributo] 10h ;Función del BIOS par enrollar ;Que limpie la ventana ;Atributo a usar en BH ;Usa servicio del BIOS ENDP PanLimpRect ;IniciaPan ; ;Entrada: ;Salida: ;Registros: INICIA EL PAQUETE DE VIDEO Ninguna BaseVid es inicializado Ninguno PROC IniciaPan push push mov int cmp jne mov ax bx ah,15 10h al,7 @@10 [BaseVid], BaseMono ;Salva registros bx ax ;Recupera ;Función del BIOS para ;traer módulo de video en AL ;¿Monocromático? ;No, brinca ;Asigna segmento para monocolor @@10: pop pop ret ENDP 3.9. ;Regresa IniciaPan Ensamblar el módulo anterior y ponerlo en librería REM: C:\SEM386>tasm /zi video C.\SEM386>tlib rem -+ video 3.10. Capturar el siguiente programa y salvar en archivo DIREC.ASM %TITLE “OBTIENE Y EXHIBE UN DIRECTORIO” IDEAL DOSSEG MODEL SNACK NomArch EQU small 256 30 ;Sesgo para nombre de archivo DATASEG AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-15 LENGUAJE ENSAMBLADOR 80386 ClaveFin Omision DB DB EXTRN EXTRN EXTRN PRÁCTICA 5 0 ‘*.*’,0 ;Cadena ASCIIZ por omisión segDTA:word sesDTA:word DatosDir:byte ;Segmento área de transferencia de datos ;Sesgo de área de transferencia ;Tiene una entrada de directorio CODESEG ; De DIRECL.OBJ EXTRN ; De PARAMS.OBJ EXTRN ; MotorDir:proc,Accion:proc TraePar:proc,CuentaPar:proc,TraeUnPar:proc De CADENAS.OBJ y MANCADE.OBJ EXTRN LargoCad:proc,SacaCadena:proc,NuevaLinea:proc Inicia: mov mov call call call mov or jz xor call ax,@data es,ax TraePar NuevaLinea CuentaPar di,offset Omision dx,dx @@10 cx,cx TraeUnpar ;AX = segmento de datos ;ES apunta a dicho segmento ;Con DS = PSP, barre línea de comando ;Una línea abajo ;Trae número de parámetros ;Apunta a cadena de búsqueda inicial ;¿número de parámetros es cero? ;Si, brinca ;Trae dirección de primer parámetro mov call bx,offset Accion MotorDir ;Apunta a subrutina de acción ;Barre entradas del directorio call mov mov int NuevaLinea ah,4ch al,[ClaveFin] 21h ;Deja espacio en pantalla ;Pide a DOS salir Inicia ;Fin de módulo DIREC.ASM @@10: Salir: END 3.11. Ensamblar y ligar el programa DIREC mediante: C:\SEM386>tasm /zi direc AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-16 LENGUAJE ENSAMBLADOR 80386 PRÁCTICA 5 C:\SEM386>tlink direc,,,rem 3.12. Ejecutar el programa mediante: C:\SEM386>direc Y C:\SEM386>direc *.exe 4. TAREAS 4.1. Cuando solamente se oprima CALCA, hacer que se escuche la melodía FANFA y avisar que necesita dos nombres de archivo en línea de comandos. 4.2. Hacer el programa FILTRO.ASM que lee un archivo y escribe otro que hace mayúsculas a todas las letras minúsculas del archivo fuente. 4.3. Hacer que el programa sea más autónomo en cuanto al tratamiento de errores de acceso a archivos. En particular, que pregunte al usuario si reintenta el acceso cuando no pueda acceder al archivo fuente. 4.4. Corregir los detalles del programa DIREC.ASM EJEMPLO DE CORRIDA DE DIREC: ABCD.ASM BINHEX.ASM CPU.ASM DIREC.ASM EXA1.ASM GRAFICOS.ASM MBIN.ASM PUNTO.ASM TASC.ASM VID-DEMO.ASM PUSEM4.ASM LINVGA.ASM DIRE.ASM ABIN.ASM CADENAS.ASM CRONO.ASM DISK.ASM EXHSEC.ASM HOLA10ASM PAG4.ASM REPARA.ASM TASCII.ASM VIDEO.ASM PUSEM5.ASM HOLA2.ASM ROJA.ASM ASINC.ASM CAJAS.ASM CRONOL.ASM EDITOR.ASM FANFA.ASM KBD.ASM PANTALLA.ASM SHELL.ASM TECLADO.ASM HELLO3.ASM PUSEM1.ASM INSTR1.ASM ALERTA.ASM BCD.ASM CALCA.ASM CUADRO.ASM EQUIPO.ASM FANTA.ASM MACDOS.ASM PARAMS.ASM SONIDOS.ASM TECLAS.ASM PUSEM3.ASM RES.ASM HOLA3.ASM DIRECL.ASM BINASC.ASM CONVI.ASM CURSOR.ASM ERRDISCO.ASM FECHESP.ASM MANCADE.ASM PARCHE.ASM STRAUSS.ASM TRM.ASM PUSEM2.ASM VGAGRAF.ASM RATON.ASM PONECAD.ASM C:\SEM386>DIREC *.ASM C:\SEM386 AUTOR: PROFESOR SALVADOR SAUCEDO FLORES EDICIÓN: PROFESOR PABLO FUENTES RAMOS 5-17 Nombre de archivo: practica 5 ensamblador 80386 Directorio: C:\Computacion V\practicas 80386 Plantilla: C:\WINDOWS\Application Data\Microsoft\Plantillas\Normal.dot Título: PRÁCTICA 5 Asunto: Prácticas de laboratorio de Computación V Autor: M. en C. Salvador Saucedo Flores Palabras clave: Comentarios: Fecha de creación: 10/07/02 06:27 P.M. Cambio número: 31 Guardado el: 23/07/02 11:51 A.M. Guardado por: Pablo Fuentes Ramos Tiempo de edición: 875 minutos Impreso el: 30/07/02 10:05 A.M. Última impresión completa Número de páginas: 17 Número de palabras: 2,580 (aprox.) Número de caracteres: 14,711 (aprox.)