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! :-)