Ensamblador - ayuda con codigo ensamblador para manejo de archivos

 
Vista:

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

ayuda con codigo ensamblador para manejo de archivos

Publicado por Marina (1 intervención) el 20/05/2012 08:04:25
Si tu quieres recibir una cadena por teclado debes hacer ésto:
.model small
.stack 100
.data
NOM LABEL BYTE ;Etiqueta para tu cadena
LONGD DB 20 ;Longitud máxima
LONGR DB ? ;Longitud real
CADENA DB 20 DUP('$'),'$'

msg1 db 10,13,'introduce cadena: ',10,13,'$'

.code
mov ax,@data
mov ds,ax

mov ah,9
lea dx,msg
int 21h

;RECIBE CADENA
mov ah,0AH
lea dx,NOM
int 21h

;******OJO! SI QUIERES MANIPULAR LA CADENA, COMO POR EJEMPLO IMPRIMIRLA, SE HACE ;ASÍ:
mov ah,9
lea dx,cad
int 21h

fin:
mov ah,4ch
int 21h
ends
end

y ahora sí, tu cadena1, que ya tiene Gerardo, cuando tu recibas CADENA con la función 0AH de la 21h, tu escribirás Gerardo, y cuando quieras usar Gerardo, sólo tomarás en cuenta CADENA

otra cosa importante, si tu quieres manipular varias cadenas, a cada una le debes poner una etiqueta, una longitud real y una longitud maxima, vale?
ejemplo:

Inversion label byte
LMax db 10
LReal db ?
Cadena db 10 dup (' '),'$'

inversion2 label byte
LMax2 db 10
LReal2 db ?
Cadena db 10 dup (' '),'$'

msg1 db 10,13,'introduce cadena1: ',10,13,'$'
msg2 db ....

Ojalá me haya podido explicar xD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ayuda con codigo ensamblador para manejo de archivos

Publicado por jazmin gonzalez torres (1 intervención) el 23/11/2015 19:16:07
hola no se si puedas ser tan amable de poder proporcionar tu correo quisiera hacerte una consulta sobre una agenda telefonica que ya tengo pero aun me marca errores y no puedo localizarlos. gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar