UNIVERSIDAD TECNICA FEDERICO SANTA MARIA

Anuncio
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
Area Electrónica
Computación e Informática
-
Sede Talcahuano
sbm/2000
;P57H21H.ASM
;*************
;Programa que ilustra como se usa la función 57H/21H (57H/21H = Leer o definir Hora y Fecha de un archivo).
;Además muestra como se maneja la cola de órdenes y como se transforma una cantidad en dígitos ASCII, para
;mostrar en pantalla.
org 100H
;Averiguar si el usuario ingresó el nombre (unidad de disco, ruta) del archivo.
INICIO:
mov al, [80H]
or al, al
jnz SIGUE
mov dx, offset MENSAJE1
call CAD_APANT
int 20H
;¿ hay cola de órdenes ? Si 0, no la hay
;afectar bandera de cero
;no hay cola de órdenes
;advertir y terminar con cadena a pantalla.
;Transformar la cola de órdenes (nombre y ruta del archivo) en una cadena ASCIIZ, para las ;funciones "handle".
SIGUE:
OTROMAS:
mov bx, 82H
mov al, [bx]
inc bx
cmp al, 0DH
jne OTROMAS
mov byte Ptr [bx]-1, 00
;revisar la cola de órdenes
;leyendo byte a byte
;posición del sgte. carácter
;detectar la ubicación del Ret. de Carro (0DH)
;no es 0DH, entonces al sgte. carácter
;y colocar allí un 00 (ASCIIZ)
;Abrir el archivo; el S.O. le asigna un n·mero o "handle" (manilla):
ABRIR:
ERROR:
mov ah, 3DH
mov al, 02H
mov dx, 82H
int 21H
jnc SINERROR
mov dx, offset MENSAJE2
call CAD_APANT
int 20H
;abrir el archivo
;modo de acceso (R/W)
;ASCIIZ del archivo está a partir de este offset
;sin no hay error ...
;si, lo hay, informar y terminar
;cadena ascii a la pantalla (09/21H)
;Leer (o definir) la hora y la fecha del archivo abierto:
SINERROR:
mov word HANDLE, ax
mov bx, ax
mov ah, 57H
mov al, 00
int 21H
;guardar el código o “handle” del archivo
;el código a BX para la función 57H
;leer la hora y la fecha
;Manipulación de la fecha del archivo (en DX):
1
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
Area Electrónica
Computación e Informática
-
AGNO:
push dx
and dx, 1111111000000000B
shr dx, 9
mov word ELAGNO, dx
MES:
pop dx
push dx
and dx, 0000000111100000B
shr dx, 5
mov word ELMES, dx
;determinar el mes
;desplazar 5 veces a la derecha
;guardar en la memoria
pop dx
and dx, 0000000000011111B
mov word ELDIA, dx
;determinar el dia
;guardar en la memoria
DIA:
Sede Talcahuano
sbm/2000
;almacenar temporalmente
;determinar el año (a partir de 1980)
;desplazar a la derecha 9 veces, anteponiendo 0
;guardar en memoria
;Tenemos ahora que tomar los datos de año, mes y día. Ahora hay que transformarlos en ASCII para emitirlos a la
;pantalla.
mov dx, offset NEWLINEA
call CAD_APANT
;para función 09/21H
;poner línea en blanco
TRANSF_D:
mov ax, word ELDIA
call CALCULA
call PANTALLA
;procesar y mostrar el dia
;devuelve en AH y AL (ASCII)
;presentar en la pantalla
TRANSF_M:
mov ax, word ELMES
call CALCULA
call PANTALLA
;procesar y mostrar el mes
;devuelve en AH y AL (ASCII)
TRANSF_A:
mov ax, word ELAGNO
add ax, 1980
mov si, 10
mov cx, 4
xor dx, dx
div si
RESTOP:
or dl, 30H
push dx
loop RESTOP
;Mostrar el año en la pantalla:
mov cx, 4
mov ah, 02
pop dx
OTRAVEZ:
int 21H
loop OTRAVEZ
mov dx, offset NEWLINEA
;procesar y mostrar el año
;suma 1980, año es a partir de ese ...
;dividir por 10 cada vez
;4 cifras tiene la cantidad
;hacer DX=0
;División nivel 16 bits: AX/10, cuociente en AX y resto en
DX
;transformar el dÝgito en ASCII
;y guardarlo en la pila
;repetir 4 veces con el cuociente
;4 veces, cuatro dígitos ...
;para función 02/21H,
;poner DL en pantalla
;para función 09/21H
2
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
Area Electrónica
Computación e Informática
call CAD_APANT
;Cerrar el archivo:
mov ah, 3EH
mov bx, word HANDLE
int 21H
FINAL:
-
Sede Talcahuano
sbm/2000
;poner línea en blanco en pantalla
;función 3EH, cerrar el archivo
int 20H
;Los procedimientos del programa:
;------------------------------------------push bx
CALCULA:
mov bl, 10
div bl
or al, 30H
or ah, 30H
pop bx
ret
;-----------------------push dx
PANTALLA:
push ax
mov dl, al
mov ah, 02
int 21H
pop ax
mov dl, ah
mov ah, 02
int 21h
mov dl, "/"
int 21H
pop dx
ret
;------------------------CAD_APANT: push ax
mov ah, 09
int 21H
pop ax
ret
;--------------------------
;determinar decena/unidad y transforma ASCII
;divisor
;División nivel 8 bits: AX/10, cuociente en AL y resto en AH
;transforma en ASCII decena (cuociente)
;transforma en ASCII unidad (resto)
;decena en AH, unidad en AL (ASCII)
;para función 02/21H, decena de dia
;para función 02/21H, unidad de dia
;separador de dia, mes y año
;generar línea en blanco en pantalla
;Los datos del programa:
;-----------------------------db 0AH, 0DH, "Debe ingresar el nombre del archivo ...", 0AH, 0DH, 24H
MENSAJE1
db 0AH, 0DH, "¡ Error en el nombre del archivo ...!", 0AH, 0DH, 24H
MENSAJE2
db 0AH, 0DH, 24H
NEWLINEA
dw ?
HANDLE
dw ?
ELAGNO
3
UNIVERSIDAD TECNICA FEDERICO SANTA MARIA
Area Electrónica
Computación e Informática
-
Sede Talcahuano
sbm/2000
dw ?
dw ?
end
;sbm/mayo 2000, P57H21H.WPD - 26
ELMES
ELDIA
4
Descargar