ayuda con codigo ensamblador para manejo de archivos
Publicado por Gerardo (1 intervención) el 08/12/2011 03:12:41
que tal me han dejado hacer un programa en ensamblador que pregunte nombre, domicilio, telefono, email y los guarde en un txt despues salga un menu sobre que es lo que quieres de esos datos y los mande llamar del txt.
bueno mi codigo solo manda llamar datos que ya tiene en el programa en seccion data, pero jamas me enseñaron como hacerlo desde teclado les dejo mi codigo un poco largo haber si salguien puede decirme que debo hacer para que haga lo que debe hacer. (esta hecho con emu 8086).
.model small
.stack
.data
cadena1 db 'Nombre: Gerardo$'
cadena2 db '---------------------------------------$'
nombre db "c:\program files\emu8086\vdrive\c\nombre.txt",0
nombre2 db "c:\program files\emu8086\vdrive\c\correo.txt",0
nombre3 db "c:\program files\emu8086\vdrive\c\telefono.txt",0
nombre4 db "c:\program files\emu8086\vdrive\c\domicilio.txt",0
linea db 10,13,'$'
cadena3 db 'Correo: --------------------------$'
cadena4 db '----------------------------------$'
cadena5 db 'Telefono: -----------$'
cadena6 db '--------------------$'
cadena7 db 'Domicilio: --------------------$'
cadena8 db '------------------------------$'
x db ?
mensaje2 db 10,13,'Que necesita de esta persona?: $'
menu_l1 db 10,13,' 1.-> CORREO$'
menu_l2 db 10,13,' 2.-> TELEFONO$'
menu_l3 db 10,13,' 3.-> DOMICILIO$'
errornum db 10,13,' WARNING:**NO HA SELECCIONADO UNA OPCION VALIDA!!**$'
opcion db 10,13,'Seleccione el numero de opcion---> $'
ciclo db 10,13,' Desea obtener otro dato de esta persona? (s=SI o Presione otra tecla para salir) --> $'
salida db 10,13,' *** PROGRAMA TERMINADO ***$'
mensaje db 10,13,'Este programa contiene archivos con datos de: $'
continuar db 10,13,'>>> Presione una tecla para continuar <<<$'
espere db 10,13,' --- Espere mientras se cargan los archivos...$'
;macros
impresion macro cadena
lea dx,cadena
mov ah,09h
int 21h
endm
.code
inicio:
mov ax,@data
mov ds,ax
;Seccion de crear archivo.
impresion espere
mov ah,3ch
mov cx,0
mov dx,offset nombre ; FILE a crear en disco
int 21h
jc salir
mov bx,ax
mov ah,3eh ; close
int 21h
; abrir
mov ah,3dh
mov al,1h
mov dx,offset nombre
int 21h
jc salir
mov bx,ax ; mover handfile
;nombre---------------------------------
mov cx, 39 ; num de caracteres a GRABAR
mov dx,offset cadena1
mov ah,40h
int 21h
cmp cx,ax
jne salir ; error salir
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mov ah,3eh ; close
int 21h
;*************** imprime la longitud y la
; cadena2 ingresada desde el disco
mov dx,offset linea ;cambiar linea
mov ah,09h
int 21h
;---------------------
; abrir para LEER desde el disco ========
mov ah,3dh
mov al,0h
mov dx,offset nombre ; ARCHIVO existente en disco
int 21h
jc salir
mov bx,ax ; mover handfile
mov dx,offset cadena2
mov ah,3fh
mov cx,39 ; numero de caracteres para LEER desde el disco
int 21h
;correo--------------------------------------
mov ah,3ch
mov cx,0
mov dx,offset nombre2 ; FILE a crear en disco
int 21h
jc salir
mov bx,ax
mov ah,3eh ; close
int 21h
; abrir
mov ah,3dh
mov al,1h
mov dx,offset nombre2
int 21h
jc salir
mov bx,ax ; mover handfile
mov cx, 34 ; num de caracteres a GRABAR
mov dx,offset cadena3
mov ah,40h
int 21h
cmp cx,ax
jne salir ; error salir
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mov ah,3eh ; close
int 21h
;*************** imprime la longitud y la
; cadena2 ingresada desde el disco
mov dx,offset linea ;cambiar linea
mov ah,09h
int 21h
;---------------------
; abrir para READ desde el disco ========
mov ah,3dh
mov al,0h
mov dx,offset nombre2 ; FILE existente en disco
int 21h
jc salir
mov bx,ax ; mover handfile
mov dx,offset cadena4
mov ah,3fh
mov cx,34 ; numero de caracteres para LEER desde el disco
int 21h
;Telefono------------------------------------------
mov ah,3ch
mov cx,0
mov dx,offset nombre3 ; FILE a crear en disco
int 21h
jc salir
mov bx,ax
mov ah,3eh ; close
int 21h
; abrir
mov ah,3dh
mov al,1h
mov dx,offset nombre3
int 21h
jc salir
mov bx,ax ; mover handfile
mov cx, 20 ; num de caracteres a GRABAR
mov dx,offset cadena5
mov ah,40h
int 21h
cmp cx,ax
jne salir ; error salir
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mov ah,3eh ; close
int 21h
;*************** imprime la longitud y la
; cadena2 ingresada desde el disco
mov dx,offset linea ;cambiar linea
mov ah,09h
int 21h
;---------------------
; abrir para READ desde el disco ========
mov ah,3dh
mov al,0h
mov dx,offset nombre3 ; FILE existente en disco
int 21h
jc salir
mov bx,ax ; mover handfile
mov dx,offset cadena6
mov ah,3fh
mov cx,20 ; numero de caracteres para LEER desde el disco
int 21h
;Domicilio-------------------------------------
mov ah,3ch
mov cx,0
mov dx,offset nombre4 ; FILE a crear en disco
int 21h
jc salir
mov bx,ax
mov ah,3eh ; close
int 21h
; abrir
mov ah,3dh
mov al,1h
mov dx,offset nombre4
int 21h
jc salir
mov bx,ax ; mover handfile
mov cx, 30 ; num de caracteres a GRABAR
mov dx,offset cadena7
mov ah,40h
int 21h
cmp cx,ax
jne salir ; error salir
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mov ah,3eh ; close
int 21h
;*************** imprime la longitud y la
; cadena2 ingresada desde el disco
mov dx,offset linea ;cambiar linea
mov ah,09h
int 21h
;---------------------
; abrir para READ desde el disco ========
mov ah,3dh
mov al,0h
mov dx,offset nombre4 ; FILE existente en disco
int 21h
jc salir
mov bx,ax ; mover handfile
mov dx,offset cadena8
mov ah,3fh
mov cx,30 ; numero de caracteres para LEER desde el disco
int 21h
;menu-------------------------------------------------------
;LIMPIAR PANTALLA
mov ah,00h
mov al,03h
int 10h
impresion linea
impresion linea
impresion mensaje
impresion linea
impresion linea
mov dx,offset cadena2 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
impresion linea
impresion continuar
mov ah,07h ;lectura sin echo de la tecla presionada para continuar
int 21h
repetir:
;LIMPIAR PANTALLA
mov ah,00h
mov al,03h
int 10h
impresion linea
impresion mensaje2
impresion linea
;opciones:
impresion menu_l1
impresion menu_l2
impresion menu_l3
impresion linea
impresion opcion
mov ah,01h
int 21h
mov x,al
cmp x,'4' ;se comprueba si la opcion es valida sino el programa marca error
jge aqui
cmp x,'0'
jle aqui
cmp x,'1' ;opcion 1.-correo
je correo
cmp x,'2' ;opcion 2.-telefono
je telefono
cmp x,'3' ;opcion 3.-domicilio
je domicilio
;imprimir en D.O.S archivos creados y leidos.
correo:
impresion linea
impresion linea
mov dx,offset cadena2 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
impresion linea
impresion linea
mov dx,offset cadena4 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
jmp salir
telefono:
impresion linea
impresion linea
mov dx,offset cadena2 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
impresion linea
impresion linea
mov dx,offset cadena6 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
jmp salir
domicilio:
impresion linea
impresion linea
mov dx,offset cadena2 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
impresion linea
impresion linea
mov dx,offset cadena8 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
jmp salir
aqui: ;las opciones dan aqui si la opcion fue invalida
impresion linea
impresion errornum
;-----------------
salir:
impresion linea
impresion ciclo ;se hace ciclo para poder usar el programa varias veces
mov ah,01h
int 21h
cmp al,'s'
je repetir
impresion linea
impresion salida
MOV AH,4CH
INT 21H
end inicio
bueno este es el codigo espero alguien pueda ayudarme.
bueno mi codigo solo manda llamar datos que ya tiene en el programa en seccion data, pero jamas me enseñaron como hacerlo desde teclado les dejo mi codigo un poco largo haber si salguien puede decirme que debo hacer para que haga lo que debe hacer. (esta hecho con emu 8086).
.model small
.stack
.data
cadena1 db 'Nombre: Gerardo$'
cadena2 db '---------------------------------------$'
nombre db "c:\program files\emu8086\vdrive\c\nombre.txt",0
nombre2 db "c:\program files\emu8086\vdrive\c\correo.txt",0
nombre3 db "c:\program files\emu8086\vdrive\c\telefono.txt",0
nombre4 db "c:\program files\emu8086\vdrive\c\domicilio.txt",0
linea db 10,13,'$'
cadena3 db 'Correo: --------------------------$'
cadena4 db '----------------------------------$'
cadena5 db 'Telefono: -----------$'
cadena6 db '--------------------$'
cadena7 db 'Domicilio: --------------------$'
cadena8 db '------------------------------$'
x db ?
mensaje2 db 10,13,'Que necesita de esta persona?: $'
menu_l1 db 10,13,' 1.-> CORREO$'
menu_l2 db 10,13,' 2.-> TELEFONO$'
menu_l3 db 10,13,' 3.-> DOMICILIO$'
errornum db 10,13,' WARNING:**NO HA SELECCIONADO UNA OPCION VALIDA!!**$'
opcion db 10,13,'Seleccione el numero de opcion---> $'
ciclo db 10,13,' Desea obtener otro dato de esta persona? (s=SI o Presione otra tecla para salir) --> $'
salida db 10,13,' *** PROGRAMA TERMINADO ***$'
mensaje db 10,13,'Este programa contiene archivos con datos de: $'
continuar db 10,13,'>>> Presione una tecla para continuar <<<$'
espere db 10,13,' --- Espere mientras se cargan los archivos...$'
;macros
impresion macro cadena
lea dx,cadena
mov ah,09h
int 21h
endm
.code
inicio:
mov ax,@data
mov ds,ax
;Seccion de crear archivo.
impresion espere
mov ah,3ch
mov cx,0
mov dx,offset nombre ; FILE a crear en disco
int 21h
jc salir
mov bx,ax
mov ah,3eh ; close
int 21h
; abrir
mov ah,3dh
mov al,1h
mov dx,offset nombre
int 21h
jc salir
mov bx,ax ; mover handfile
;nombre---------------------------------
mov cx, 39 ; num de caracteres a GRABAR
mov dx,offset cadena1
mov ah,40h
int 21h
cmp cx,ax
jne salir ; error salir
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mov ah,3eh ; close
int 21h
;*************** imprime la longitud y la
; cadena2 ingresada desde el disco
mov dx,offset linea ;cambiar linea
mov ah,09h
int 21h
;---------------------
; abrir para LEER desde el disco ========
mov ah,3dh
mov al,0h
mov dx,offset nombre ; ARCHIVO existente en disco
int 21h
jc salir
mov bx,ax ; mover handfile
mov dx,offset cadena2
mov ah,3fh
mov cx,39 ; numero de caracteres para LEER desde el disco
int 21h
;correo--------------------------------------
mov ah,3ch
mov cx,0
mov dx,offset nombre2 ; FILE a crear en disco
int 21h
jc salir
mov bx,ax
mov ah,3eh ; close
int 21h
; abrir
mov ah,3dh
mov al,1h
mov dx,offset nombre2
int 21h
jc salir
mov bx,ax ; mover handfile
mov cx, 34 ; num de caracteres a GRABAR
mov dx,offset cadena3
mov ah,40h
int 21h
cmp cx,ax
jne salir ; error salir
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mov ah,3eh ; close
int 21h
;*************** imprime la longitud y la
; cadena2 ingresada desde el disco
mov dx,offset linea ;cambiar linea
mov ah,09h
int 21h
;---------------------
; abrir para READ desde el disco ========
mov ah,3dh
mov al,0h
mov dx,offset nombre2 ; FILE existente en disco
int 21h
jc salir
mov bx,ax ; mover handfile
mov dx,offset cadena4
mov ah,3fh
mov cx,34 ; numero de caracteres para LEER desde el disco
int 21h
;Telefono------------------------------------------
mov ah,3ch
mov cx,0
mov dx,offset nombre3 ; FILE a crear en disco
int 21h
jc salir
mov bx,ax
mov ah,3eh ; close
int 21h
; abrir
mov ah,3dh
mov al,1h
mov dx,offset nombre3
int 21h
jc salir
mov bx,ax ; mover handfile
mov cx, 20 ; num de caracteres a GRABAR
mov dx,offset cadena5
mov ah,40h
int 21h
cmp cx,ax
jne salir ; error salir
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mov ah,3eh ; close
int 21h
;*************** imprime la longitud y la
; cadena2 ingresada desde el disco
mov dx,offset linea ;cambiar linea
mov ah,09h
int 21h
;---------------------
; abrir para READ desde el disco ========
mov ah,3dh
mov al,0h
mov dx,offset nombre3 ; FILE existente en disco
int 21h
jc salir
mov bx,ax ; mover handfile
mov dx,offset cadena6
mov ah,3fh
mov cx,20 ; numero de caracteres para LEER desde el disco
int 21h
;Domicilio-------------------------------------
mov ah,3ch
mov cx,0
mov dx,offset nombre4 ; FILE a crear en disco
int 21h
jc salir
mov bx,ax
mov ah,3eh ; close
int 21h
; abrir
mov ah,3dh
mov al,1h
mov dx,offset nombre4
int 21h
jc salir
mov bx,ax ; mover handfile
mov cx, 30 ; num de caracteres a GRABAR
mov dx,offset cadena7
mov ah,40h
int 21h
cmp cx,ax
jne salir ; error salir
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mov ah,3eh ; close
int 21h
;*************** imprime la longitud y la
; cadena2 ingresada desde el disco
mov dx,offset linea ;cambiar linea
mov ah,09h
int 21h
;---------------------
; abrir para READ desde el disco ========
mov ah,3dh
mov al,0h
mov dx,offset nombre4 ; FILE existente en disco
int 21h
jc salir
mov bx,ax ; mover handfile
mov dx,offset cadena8
mov ah,3fh
mov cx,30 ; numero de caracteres para LEER desde el disco
int 21h
;menu-------------------------------------------------------
;LIMPIAR PANTALLA
mov ah,00h
mov al,03h
int 10h
impresion linea
impresion linea
impresion mensaje
impresion linea
impresion linea
mov dx,offset cadena2 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
impresion linea
impresion continuar
mov ah,07h ;lectura sin echo de la tecla presionada para continuar
int 21h
repetir:
;LIMPIAR PANTALLA
mov ah,00h
mov al,03h
int 10h
impresion linea
impresion mensaje2
impresion linea
;opciones:
impresion menu_l1
impresion menu_l2
impresion menu_l3
impresion linea
impresion opcion
mov ah,01h
int 21h
mov x,al
cmp x,'4' ;se comprueba si la opcion es valida sino el programa marca error
jge aqui
cmp x,'0'
jle aqui
cmp x,'1' ;opcion 1.-correo
je correo
cmp x,'2' ;opcion 2.-telefono
je telefono
cmp x,'3' ;opcion 3.-domicilio
je domicilio
;imprimir en D.O.S archivos creados y leidos.
correo:
impresion linea
impresion linea
mov dx,offset cadena2 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
impresion linea
impresion linea
mov dx,offset cadena4 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
jmp salir
telefono:
impresion linea
impresion linea
mov dx,offset cadena2 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
impresion linea
impresion linea
mov dx,offset cadena6 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
jmp salir
domicilio:
impresion linea
impresion linea
mov dx,offset cadena2 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
impresion linea
impresion linea
mov dx,offset cadena8 ;imprime lo leido en el archivo creado arriba..
mov ah,09h
int 21h
jmp salir
aqui: ;las opciones dan aqui si la opcion fue invalida
impresion linea
impresion errornum
;-----------------
salir:
impresion linea
impresion ciclo ;se hace ciclo para poder usar el programa varias veces
mov ah,01h
int 21h
cmp al,'s'
je repetir
impresion linea
impresion salida
MOV AH,4CH
INT 21H
end inicio
bueno este es el codigo espero alguien pueda ayudarme.
Valora esta pregunta


0