Ensamblador - Creacion de Archivos Como obtener el Nombre?

   
Vista:

Creacion de Archivos Como obtener el Nombre?

Publicado por Adolfo (1 intervención) el 25/05/2008 05:32:32
Hola, tengo que hacer un código que tome toda la información que de un chat, la guarde en un sector de memoria de forma temporal y luego si el usuario lo desea la guarde en un archivo. Ya logré crear un archivo de texto para guardar la conversación, pero sólo si el nombre en formato ASCIIZ lo ingreso automaticamente. No se como hacer para recibir el nombre del archivo por parte del usuario. El proyecto especifica que el directorio puede ser fijo, por lo que cree un código para concatenar un nombre de archivo con un directorio y pasarlo como ruta a la instrucción 21H correspondiente pero cuando lo ejecuto no hace nada, espero que me puedan ayudar. Les adjunto el código por si lo desean estudiar, pero no se si esa es la manera correcta de solicitar el nombre de archivo a un usuario. Agradezco cualquier ayuda.

.MODEL SMALL
.STACK 64

.DATA
Long_e DB 14
Long_s DB 15
nombrearchivo DB 'prueba.txt' ;variable que contiene el nombre del archivo (temporal)
Long_nombre DB 10 ;variable que contiene la longitud del archivo,
Manejador DW ?
Cadena_e_Segmento DB 'Usuario1: ', 2 DUP (31H),0DH,0AH
Cadena_s_Concat DB 'Usuario2: ', 3 DUP (35H),0DH,0AH
;Ruta2 DB 'C:wscitecodeprueba.txt',00H
Ruta DB 'C:wscitecode',5CH;, 5 DUP('')


.CODE
NombreArchivar proc far
MOV AX,@DATA ;Inicializacion segmento de datos
MOV DS,AX
MOV ES,AX
MOV BP,8000H ;apunta al inicio del bufer de archivo
MOV DI,BP ;Coloca el buffer de archivo a la mitad del segmento de datos.
CALL BuffExtra_Entrada ;llama a una funcion para mover una linea recibida por puerto serie al bufer de archivo
CALL BuffExtra_Salida ; mueve una linea digitada y desplegada al bufer de archivo
MOV DS:[DI], 1AH ; Marca de fin de archivo
INC DI
SUB DI,BP ;cantidad de datos que hay que archivar
LEA CX,Long_nombre ;Carga la longitud delnombre archivo.
DEC CX ;Decrementa en uno la longitud del nombre del archivo
;para tomar en cuenta el Byte 0
CALL Concatenador ;llama al programa que concatena la Ruta con el nombre
CALL ManejoArchivo ;llama al programa que crea el archivo
INT 20H ;cierra el programa
NombreArchivar endp

ManejoArchivo proc near
;CREACION DE ARCHIVO
MOV AH, 3CH ; peticion para crear archivo
MOV CX,00H ; atributo normal
;LEA DX, Ruta2 ; lee la ruta
LEA DX, Ruta2 ; lee la ruta
INT 21H ; llama al DOS para la interrupcion
MOV Manejador, AX ; guarda el manejador de archivo en memoria
;ESCRITURA DE ARCHIVO
MOV CX,DI ; Indica la cantidad de datos a enviar al archivo
MOV AH,40H ; peticion de escritura
MOV BX, Manejador ; manejador de archivo
MOV DX,BP ; Direccion del area de salida
INT 21H;
;CERRAR ARCHIVO
MOV AH,3EH ; peticion para cerrar archivo
MOV BX,Manejador
INT 21H
MOV DI,BP ; Luego de archivar los datos reinicia el puntero del buffer
RET
ManejoArchivo endp

Concatenador proc near
PUSH DI
LEA SI,nombrearchivo ;lee el nombre del archivo
LEA DI, Ruta ;lee la ruta del directorio
CALL DirAlta ;ajusta las direcciones de ES y DI
ADD DI,15 ; suma 15 para iniciar en el final de la ruta del directorio
Lazo: MOV AL,DS:[SI]
MOV ES:[DI],AL
INC DI
INC SI
LOOP Lazo
MOV DS:1[DI], 00H; agrega el 0 para darle formato ASCIIZ
POP DI
RET
Concatenador endp

DirAlta proc near ;programa para leer la parte alta del buffer
PUSH AX
PUSH DI
MOV AX,DS
SHR DI,4
ADD AX,DI
MOV ES,AX
POP DI
AND DI,000FH
POP AX
RET
DirAlta endp

BuffExtra_Entrada proc near
CLI
MOV CH,0
MOV CL,Long_e
LEA SI,Cadena_e_Segmento
Ciclo1: MOV AL,DS:[SI]
MOV DS:[DI],AL
INC DI
INC SI
LOOP Ciclo1
STI
RET
BuffExtra_Entrada endp
;---------------------------------------------------------------

;--------------- Escribe registro en disco -------------------
;---------------------------------------------------------------
BuffExtra_Salida proc near
CLI
MOV CH,0
MOV CL,Long_s
LEA SI,Cadena_s_Concat
Ciclo2: MOV AL,DS:[SI]
MOV DS:[DI],AL
INC DI
INC SI
LOOP Ciclo2
STI
RET
BuffExtra_Salida endp

end NombreArchivar
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