Está en la página 1de 7

Para el manejo de archivos es esencial conocer las instrucciones e interrupciones para dichas

operaciones.
Para crear archivo: 3ch
Para abrir un archivo: 3dh
Para escribir sobre un archivo: 40h
Para cerrar un archivo: 3eh
Eliminar un archivo: 41h
Todas las instrucciones llevan la interrupcin int 21h

CODIGO ASM
.model small
include otro.inc
include 1-crear.inc
include 2-abrir.inc
include 3-escribir.inc
include 4-leer.inc
include cierra.inc
include elimin.inc
;include salirx.inc
.stack 64
.data
msg db 10,13, "*****Menu*****","$"
msg1 db 10,13, "1. Crear Archivo $"
msg2 db 10,13, "2. Abrir Archivo $"
msg3 db 10,13, "3. Escribir Archivo $"
msg4 db 10,13, "4. Leer Archivo $"
msg5 db 10,13, "5. Cerrar Archivo $"
msg6 db 10,13, "6. Eliminar Archivo $"
msg7 db 10,13, "7. Salir $"
msg8 db 10,13, "8. Ordenar $"
msg9 db 10,13, "Elija un opcion: $"
nom db "aprueba.txt", 0 ;nombre archivo a crear
creado db 10,13, "Archivo creado!! $"
abierto db 10,13, "Archivo abierto!! $"
escrito db 10, 13, "Archivo Escrito!! $"
leido db 10, 13, "Archivo Leido!! $"
cerrado db 10, 13, "Archivo Cerrado!! $"
;eliminar db 10, 13, "Archivo Eliminado!! $"

vec db 50 dup('$')

;variable a usar para la escritura del archivo.

.code
;Cargamos el segmento de datos para sacar el nombre del archivo.

mov ax, @data


mov ds, ax
menu:
imprimir msg
imprimir msg1
imprimir msg2
imprimir msg3
imprimir msg4
imprimir msg5
imprimir msg6
imprimir msg7
imprimir msg8
imprimir msg9
mov ah,0dh
int 21h
mov ah,01h
int 21h

;0dh es el cdigo hexadecimal del Enter,


;peticion de leer caracter

;comparamos la opcin que se tecle


cmp al,31h
je crear
cmp al,32h
je abrir
cmp al,33h
je escribir
cmp al,34h
je leer
cmp al,35h
je cerrar
cmp al,36h
;je elim
;cmp al,37h
crear:
crear nom creado
abrir:
abrir nom abierto

escribir:
escribir nom escrito
leer:
leer nom leido
cerrar:
cerrar nom cerrado
;elim:
;elim nom eliminar
salir:
salir
end

MACROS
1.crear.inc
mov ah,3ch
mov cx,0

;instruccin(servicio) para crear el archivo.


;longitud de cadena

lea dx, nombre


int 21h

;llamada interrupcin software 21H

jc salir

;si no se pudo crear el archivo arroja un error, se captura con jc.

imprimir creado ;mensaje en asm que se ejecuta despus de realizada una tarea de una opcion
mov bx,ax
mov ah,3eh

;cierra el archivo

int 21h
jmp men

;regresa al menu

crear endm
2 .abrir.inc
abrir macro nombre
mov ah,3dh

;servicio para abrir el archivo

mov al,0h

;0h solo lectura, 1h solo escritura, 2h lectura y escritura

mov dx,offset nombre

;abre el archivo llamado .txt indicado en .data

int 21h
mov ah,42h
mov al,00h
mov bx,ax

;Mueve el apuntador de lectura/escritura al archivo

mov cx,50

;Decimos que queremos leer 50 bytes del archivo

int 21h
;leer archivo
mov ah,3fh ;Lectura del archivo
mov bx,ax ;guarda en bx el manejador
mov cx,10
mov dx,offset vec
imprimir abierto
int 21h
mov ah,09h
int 21h
mov ah,3eh
int 21h
jmp menu
endm

;peticion para desplegar

;Cierre de archivo

3. escribir.inc
escribir macro nombre escrito
pedir:
mov ah,01h ;pedimos un carcter, al leer el caracter, este lo mostrara
int 21h
mov vec[si],al
;Se guarda en el registro indexado al vector
inc si
cmp al,0dh ;Se cicla hasta que se digite un Enter
ja pedir ;salta si es mayor
jb pedir ;salta si es menor
mov ah,3dh

;3dh abrir archivo

mov al,1h ;Abrimos el archivo en solo escritura.


mov dx,offset nombre ; Mover a DX el desplazamiento posicin de la variable nombre
int 21h
jc salir

;Si hubo error

;Escritura de archivo
mov bx,ax

; mover hadfile

mov cx,si
;num de caracteres a grabar
mov dx,offset vec ; Direccion del texto a imprimir
mov ah,40h ;escribe sobre el archivo
int 21h

imprimir escrito ;mensaje en asm que se ejecuta despus de realizada una tarea de una opcion
cmp cx,ax
mov ah,3eh ;Cierre de archivo
int 21h
jmp men ;regresa al menu
endm
4. leer.inc
leer macro nombre leido
mov ah,3fh ;servicio para lectura de registro
mov bx,ax
; guarda en bx el manejador
mov cx,10
;longitud de registro a leer
mov dx,offset ledo ; Direccion del texto a imprimir
int 21h
mov ah,09h
int 21h
mov ah,3eh
int 21h
jmp menu
endm

cierra.inc
cerrar macro nombre cerrado
mov ah,3dh
mov al,1h
mov dx,offset nombre
int 21h
jc salir
mov bx,ax
mov cx,si
mov dx,offset vec
mov ah,40h
int 21h
imprimir cerrado
cmp cx,ax
;jne salir
mov ah,3eh
int 21h
jmp menu

;servicio para cerrar el archivo

endm
elimin.inc
elim macro eliminar
eliminar:
mov ah,41h
mov dx, offset nombre
int 21h
;jc salir
imprime msg6
mov ah,3eh
int 21h
jmp menu
endm
otro.inc
imprimir macro char ;macro imprimir
mov ah,09 ;visualizacin de una cadena de caracteres
lea dx, char
int 21h
endm
salir macro
;macro salir
mov ah,04ch
int 21h
endm
pedir macro in
;macro pedir
imprimir
mensaje
lea SI, cadena
mov cx, 6
regresa:
mov ah, 01
int 21h
cmp al, 13
je termina
mov nombre[SI], al
inc SI
loop regresa
termina:

mov dl, 13
mov ah, 02h
int 21h
mov dl, 10
mov ah, 02h
int 21h
endm

salir.inc
salir macro nombre saliendo
salir:
mov ah,04ch
int 21h
endm

También podría gustarte