Copiar un archivo a otro

Anuncio
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.)
Descargar