Hola mundo en ensamblador con debug sobre dosbox

Con dosbox podemos usar la versión del programa “debug” para DOS si la bajamos de aquí: debug.zip

O utilizar dosbox-x (un fork de dosbox que mola mucho) que ya lo trae por defecto.

En otra futura entrada hablaremos del modo debug de dosbox ya que es crema de la buena y nos puede servir para desproteger “mochilas” de software, vidas infinitas en juegos, saltarnos la validación o protección anticopia de algún juego de msdos, …

En esta entrada solamente vamos a ver como lanzar debug sobre dosbox y crear por ejemplo un hola mundo en ensamblador.

Lo primero es lanzar dosbox (vamos a suponer que lo tienes instalado así como wget y unzip) desde el directorio en el que tengamos debug.com (el zip contiene el archivo debug.com).

$ wget "https://mierda.tv/wp-contenido/uploads/2018/01/DEBUG.zip"
$ wget "https://mierda.tv/wp-contenido/uploads/2018/01/EDIT.zip"
$ unzip DEBUG.zip
$ unzip EDIT.zip
$ rm DEBUG.zip EDIT.zip
$ dosbox -c "keyb sp" -c "mount c ." -c "c:" -c "cls" 

Veremos algo así como esto:

Digamos que ya tenemos debug listo para usarlo.
Con el editor de textos edit (versión de freedos) vamos a poder editar un archivo llamado “hola.asm” escribiendo “edit hola.asm”, guardando los cambios con control+s y saliendo con alt+x.

el contenido de ese archivo puede ser algo así como este:

a 0100
mov ah,9
mov dx,108
int 21
ret
db "hola mundo!$"

n c:hola.com

r bx 0

r cx 15

w

Lo ejecutaremos con debug así:

debug > hola.asm

Eso generará un archivo llamado hola.com que será ejecutable.

Para entender un poco el tema:

* Los archivos .com siempre se ejecutan si no se especifica la extensión antes que los exe. Por ejemplo si tenemos un programa llamado hola.exe y otro llamado hola.com y escribimos simplemente “hola” se ejecutará hola.com y NO hola.exe.

* Los archivos .com siempre comienzan 256 bytes en el segmento (0x100 == 256).

* Antes de int21 indicamos en el acumulador AH la función 09h (display string) (lo hacemos así: mov ah,9)

* En el registro de datos dx movemos el contenido que esté en 0108 (que será la cadena de texto hola mundo!”.

* int 0x21 (int 21) llama a los servicios dos, Interrupción 21h.

* nueva linea 0d 0a (13 10) https://en.wikipedia.org/w/index.php?title=0D_0A&redirect=no

* Aquí podemos obtener documentación muy buena sobre debug: http://thestarman.pcministry.com/asm/debug/debug2.htm

Con debug por tanto vemos que podemos generar archivos ejecutables en ensamblador aunque podemos hacer bastantes cosas más claro.

Dosbox puede ponerse en pantalla completa con alt+enter (dosbox-x lo mismo) y se sale de la pantalla completa con la misma combinación de teclas.

De dosbox salimos escribiendo exit.

Aunque debug nos permite bastantes cosas hemos de tener en cuenta que dosbox-x compilado activando el modo debug heavy nos permitirá mucho mucho más y de forma muy molona.

Una captura del modo debug de dosbox:

4 comentarios

puppet 22 enero, 2018 Contestar

Joder, y yo sin conocerlo, estoy es muy interesante +1000, gracias por compartirlo

mrchord 22 enero, 2018 Contestar

Es el momento de desempolvar el libro de lenguaje ensamblador de los 80×86 de Jon Beltrán y algunas revistas de los 90 muchas gracias!!!

goio 23 enero, 2018 Contestar

Visto desde navegador en modo texto aka links! 😉

mierda 23 enero, 2018 Contestar

Me creo que sea verdad :).

Deja un comentario