Programa de altas, bajas, modificacion y eliminacion. Ensamblador Masm32
Publicado por Moises Eduardo (1 intervención) el 02/06/2024 00:08:26
E inicializado los datos para ya no registrar pero a la hora de querer mostrar todos los datos del archivo en la consola, solo me sale el primer nombre y una coma. No se que prodria hacer, soy nuevo en este leguaje
include \masm32\include\masm32rt.inc
.data
inputBuffer db 256 dup (0) ; Buffer para almacenar la entrada del usuario
bufferSize DWORD 256
; Definición de la estructura usuario
usuario STRUCT
nombre db 50 dup (0) ; Espacio para el nombre (máximo 50 caracteres)
edad db 3 dup (0) ; Espacio para la edad (máximo 2 caracteres y un terminador nulo)
nempleado db 5 dup (0) ; Espacio para el número de empleado (máximo 4 caracteres y un terminador nulo)
usuario ENDS
; Inicialización de los datos de los usuarios
InfUsuario1 usuario <"Moises Estrella", "30", "1234">
InfUsuario2 usuario <"Luis Rodrigo", "20", "1432">
InfUsuario3 usuario <"Eduardo Noble", "25", "2734">
.data
newline db 0Dh, 0Ah, 0 ; Carácter de nueva línea
limit db ",", 0 ; Definir limit como un byte (carácter)
.code
start:
; Llamar a la función principal
call main
inkey
exit
main proc
LOCAL hFile :DWORD ; file handle
LOCAL bwrt :DWORD ; variable for bytes written
LOCAL flen :DWORD ; file length variable
LOCAL hMem :DWORD ; allocated memory handle
LOCAL lenNombre :DWORD ; variable to hold length of strings
LOCAL lenEdad :DWORD
LOCAL lenNEmpleado :DWORD
LOCAL pBufferEnd :DWORD ; pointer to the end of the buffer
; Verificar si el archivo existe y eliminarlo si es así
.if rv(exist, "testfile.txt") != 0
test fdelete("testfile.txt"), eax ; delete it
.endif
; Crear un nuevo archivo
mov hFile, fcreate("testfile.txt")
.if eax == 0
print "Error creando el archivo", 13, 10
ret
.endif
; Escribir los datos del usuario 1 en el archivo
invoke lstrlen, OFFSET InfUsuario1.nombre
mov lenNombre, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario1.nombre, lenNombre)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario1.edad
mov lenEdad, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario1.edad, lenEdad)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario1.nempleado
mov lenNEmpleado, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario1.nempleado, lenNEmpleado)
mov bwrt, fwrite(hFile, OFFSET newline, SIZEOF newline)
; Escribir los datos del usuario 2 en el archivo
invoke lstrlen, OFFSET InfUsuario2.nombre
mov lenNombre, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario2.nombre, lenNombre)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario2.edad
mov lenEdad, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario2.edad, lenEdad)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario2.nempleado
mov lenNEmpleado, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario2.nempleado, lenNEmpleado)
mov bwrt, fwrite(hFile, OFFSET newline, SIZEOF newline)
; Escribir los datos del usuario 3 en el archivo
invoke lstrlen, OFFSET InfUsuario3.nombre
mov lenNombre, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario3.nombre, lenNombre)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario3.edad
mov lenEdad, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario3.edad, lenEdad)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario3.nempleado
mov lenNEmpleado, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario3.nempleado, lenNEmpleado)
mov bwrt, fwrite(hFile, OFFSET newline, SIZEOF newline)
fclose hFile ; Cerrar el archivo
; Mostrar el contenido del archivo
mov hFile, fopen("testfile.txt") ; open the existing file again
.if eax == 0
print "Error abriendo el archivo", 13, 10
ret
.endif
mov flen, fsize(hFile) ; get its length
mov hMem, alloc(flen + 1) ; allocate a buffer of that size, +1 for null terminator
mov bwrt, fread(hFile, hMem, flen) ; read data from file into buffer
; Calcular la dirección del final del buffer y añadir un terminador nulo
mov eax, hMem
add eax, flen
mov byte ptr [eax], 0 ; add null terminator
fclose hFile ; close the file
; Mostrar el contenido leído del archivo
print hMem, 13, 10 ; display text to console
free hMem ; free the allocated memory
ret
main endp
end start
include \masm32\include\masm32rt.inc
.data
inputBuffer db 256 dup (0) ; Buffer para almacenar la entrada del usuario
bufferSize DWORD 256
; Definición de la estructura usuario
usuario STRUCT
nombre db 50 dup (0) ; Espacio para el nombre (máximo 50 caracteres)
edad db 3 dup (0) ; Espacio para la edad (máximo 2 caracteres y un terminador nulo)
nempleado db 5 dup (0) ; Espacio para el número de empleado (máximo 4 caracteres y un terminador nulo)
usuario ENDS
; Inicialización de los datos de los usuarios
InfUsuario1 usuario <"Moises Estrella", "30", "1234">
InfUsuario2 usuario <"Luis Rodrigo", "20", "1432">
InfUsuario3 usuario <"Eduardo Noble", "25", "2734">
.data
newline db 0Dh, 0Ah, 0 ; Carácter de nueva línea
limit db ",", 0 ; Definir limit como un byte (carácter)
.code
start:
; Llamar a la función principal
call main
inkey
exit
main proc
LOCAL hFile :DWORD ; file handle
LOCAL bwrt :DWORD ; variable for bytes written
LOCAL flen :DWORD ; file length variable
LOCAL hMem :DWORD ; allocated memory handle
LOCAL lenNombre :DWORD ; variable to hold length of strings
LOCAL lenEdad :DWORD
LOCAL lenNEmpleado :DWORD
LOCAL pBufferEnd :DWORD ; pointer to the end of the buffer
; Verificar si el archivo existe y eliminarlo si es así
.if rv(exist, "testfile.txt") != 0
test fdelete("testfile.txt"), eax ; delete it
.endif
; Crear un nuevo archivo
mov hFile, fcreate("testfile.txt")
.if eax == 0
print "Error creando el archivo", 13, 10
ret
.endif
; Escribir los datos del usuario 1 en el archivo
invoke lstrlen, OFFSET InfUsuario1.nombre
mov lenNombre, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario1.nombre, lenNombre)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario1.edad
mov lenEdad, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario1.edad, lenEdad)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario1.nempleado
mov lenNEmpleado, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario1.nempleado, lenNEmpleado)
mov bwrt, fwrite(hFile, OFFSET newline, SIZEOF newline)
; Escribir los datos del usuario 2 en el archivo
invoke lstrlen, OFFSET InfUsuario2.nombre
mov lenNombre, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario2.nombre, lenNombre)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario2.edad
mov lenEdad, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario2.edad, lenEdad)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario2.nempleado
mov lenNEmpleado, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario2.nempleado, lenNEmpleado)
mov bwrt, fwrite(hFile, OFFSET newline, SIZEOF newline)
; Escribir los datos del usuario 3 en el archivo
invoke lstrlen, OFFSET InfUsuario3.nombre
mov lenNombre, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario3.nombre, lenNombre)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario3.edad
mov lenEdad, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario3.edad, lenEdad)
mov bwrt, fwrite(hFile, OFFSET limit, SIZEOF limit)
invoke lstrlen, OFFSET InfUsuario3.nempleado
mov lenNEmpleado, eax
mov bwrt, fwrite(hFile, OFFSET InfUsuario3.nempleado, lenNEmpleado)
mov bwrt, fwrite(hFile, OFFSET newline, SIZEOF newline)
fclose hFile ; Cerrar el archivo
; Mostrar el contenido del archivo
mov hFile, fopen("testfile.txt") ; open the existing file again
.if eax == 0
print "Error abriendo el archivo", 13, 10
ret
.endif
mov flen, fsize(hFile) ; get its length
mov hMem, alloc(flen + 1) ; allocate a buffer of that size, +1 for null terminator
mov bwrt, fread(hFile, hMem, flen) ; read data from file into buffer
; Calcular la dirección del final del buffer y añadir un terminador nulo
mov eax, hMem
add eax, flen
mov byte ptr [eax], 0 ; add null terminator
fclose hFile ; close the file
; Mostrar el contenido leído del archivo
print hMem, 13, 10 ; display text to console
free hMem ; free the allocated memory
ret
main endp
end start
Valora esta pregunta


0