Ensamblador - debug DOS

 
Vista:

debug DOS

Publicado por Jose Luis Caro (2 intervenciones) el 15/12/2000 00:00:00
Por favor necesito ayuda para grabar programas realizados en debug de DOS
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

RE:debug DOS

Publicado por Pedro Pablo (21 intervenciones) el 19/12/2000 00:00:00
Utiliza el comando "n" para especificar el nombre. Luego tienes que cargar en los registros DX:CX el tamaño a grabar, y luego ejecutar el comando "w".
Realmente lo que hace es grabar el contenido de la memoria que comienza en la posición 100h de CS, grabando "DX:CX bytes", por lo tanto solo vale para grabar ficheros .com
Por ejemplo, haces un programa que comienza en la posición 100h de CS, y ocupa 200h bytes.
Para grabarlo tendrás que usar:
n NombreFichero.com
r cx
200
r dx
0
w

Con "n NombreFichero.com" le indicas el nombre que quieres que utilice cuando grabe.
Con "r cx" y "r dx" estableces el valor de esos dos registros, para indicar el espacio que quieres que te grabe.
Luego con w realizas la escritura

Espero que te sirva!
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

RE:debug DOS

Publicado por MaGoG (6 intervenciones) el 22/12/2000 00:00:00
Un archivo .com, por definición, no puede ocupar más de 64kb. (2^16). Si el tamaño a grabar está en DX:CX, esto supone un total de 32 bits. 2^32=4294967296. No entiendo porqué dices que sólo se pueden grabar archivos .com.
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

RE:debug DOS

Publicado por Pedro Pablo (21 intervenciones) el 23/12/2000 00:00:00
Lo primero, me equivoqué en mi contestación. El tamaño no se especifica en DX:CX como dije, sino en BX:CX. Siento si a alguien le ha perjudicado mi error.
Respecto a lo de los COM y EXE, tienes razón... en parte :-)
Un .COM normal de MS-DOS solo puede, efectivamente, ocupar 64 Kb (bueno, 64Kb menos 100h bytes supongo). El debug no graba .EXE, pero puede grabar más de 64 kb. ¿Contradicción? En realidad no.
Los .COM son ficheros binarios que el MS-DOS pasa directamente a un segmento de memoria, sin ningun análisis del fichero. Como solo utiliza un segmento, no pueden ocupar más de los 64 Kb que comentas.
Los .EXE pueden ocupar más. Esto se debe a que tienen una cabecera, que proporciona al MS-DOS información sobre el modo en que debe cargar el fichero. Gracias a esa cabecera se puede cargar un EXE en cualquier zona de la memoria y que su ejecución sea correcta.
La orden "w" del Debug se limita a leer en la memoria tantos bytes como se le indiquen en BX:CX, y copiarlos a un fichero, tal cual.
Así, con el Debug, se pueden modificar ficheros cualesquiera, pudiendolo utilizar como un simple editor hexadecimal, sin usarlo para desensamblar.
El Debug en ningún momento graba la cabecera necesaria en los ficheros .exe, por lo que no pueden grabarse ficheros .exe válidos. Únicamente crear ficheros ejecutables .com. Naturalmente si se crea un fichero .com de más de 64 Kb (algo posible desde el Debug), éste no podrá ejecutarse en MS-DOS (tal vez sí desde Windows, aunque no estoy seguro).
La utilidad por lo tanto de poder guardar más de 64 Kb es para el uso del Debug en modo editor hexadecimal.

Una cosa curiosa. Aunque el Debug no graba la cabecera de los .exe, sí los lee. Si se utiliza:
debug MiPrograma.Exe

debug cargará correctamente el Exe, pero luego no se podrá grabar.

¡Espero no equivocarme esta vez! :-)
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