MAWA - Un lenguaje tan simple como Python pero tan potente como Assembler, el ASM moderno pero mucho más sencillo.

Published: (January 3, 2026 at 10:07 PM EST)
3 min read
Source: Dev.to

Source: Dev.to

Introducción

MAWA es un lenguaje de programación que combina una sintaxis tan sencilla como la de Python con la potencia de bajo nivel de un ensamblador moderno. Su objetivo es ofrecer una experiencia de desarrollo tan simple como la de un lenguaje de alto nivel, pero permitiendo el control y la eficiencia típicos del ensamblador.

Video demostración

Puedes ver un video explicativo de MAWA en el siguiente enlace:
https://youtu.be/EnuehLUTByU

Antecedentes

Si no leíste el primer artículo sobre MAWA, puedes consultarlo aquí:
MAWA – El lenguaje de programación del futuro

Compilación simplificada

En lenguajes como C o C++ el proceso de compilación suele requerir varios pasos:

  1. .c / .cpp.o (compilador)
  2. .o.elf (linker)
  3. .elf.bin (conversor)

Con MAWA (y con NASM en ensamblador) el flujo es mucho más directo:

  • NASM: .asm.bin
  • MAWA: .mawa.bin (usando su propio compilador)

Esta reducción de etapas simplifica tanto la herramienta necesaria como el proceso de generación del ejecutable.

Sintaxis

MAWA está diseñada para minimizar la cantidad de líneas de código necesarias. A diferencia del ensamblador o de C en modo bajo nivel, donde a menudo se requieren varias instrucciones para tareas simples, MAWA permite expresar la misma lógica en una sola línea.

Ejemplo de código MAWA

Imp ('A', DefFinLinea(1), 'B', 0x0A)
FinalLoop (No Extensiones)
  • Imp imprime los caracteres especificados.
  • DefFinLinea(1) genera un salto de línea.
  • El último argumento (0x0A) indica el color del fondo y del texto (fondo negro, letra verde claro).
  • FinalLoop mantiene el programa en un bucle infinito para evitar que la CPU lea bytes 00 y produzca datos basura en QEMU.

Código ASM 16 bits (NASM)

BITS 16

inicioCodigo:
    mov ax, 0x0003
    int 0x10

    mov ah, 0x09
    mov al, 'A'
    mov bl, 0x0A
    mov bh, 0x00
    mov cx, 1
    int 0x10

    call finLinea

    mov ah, 0x09
    mov al, 'B'
    mov bl, 0x0A
    mov bh, 0x00
    mov cx, 1
    int 0x10

    jmp $

finLinea:
    mov ah, 0x0E
    mov al, 0x0D
    int 0x10

    mov ah, 0x0E
    mov al, 0x0A
    int 0x10

    ret

times 510 - ($ - $$) db 0
dw 0xAA55

Este fragmento imprime A y B usando la interrupción 0x10 con el modo de color 0x09. La rutina finLinea genera un salto de línea (CR+LF) mediante la interrupción 0x0E.

Código ASM 32 bits (NASM)

BITS 32

mov edi, 0xB8000          ; dirección base de la memoria de video VGA
mov byte [edi], 'A'       ; carácter
mov byte [edi+1], 0x0A    ; atributo (verde claro)

add edi, 160              ; salto de línea (80 columnas * 2 bytes)

mov byte [edi], 'B'
mov byte [edi+1], 0x0A

jmp $                     ; bucle infinito

En modo protegido, el programa escribe directamente en la memoria de video (0xB8000). Cada carácter ocupa dos bytes: el carácter y su atributo de color. El desplazamiento de 160 bytes corresponde a una fila completa en modo texto de 80 columnas.

Otros proyectos

Estoy desarrollando Win Anti App Anchor, un sistema operativo construido con MAWA. Próximamente publicaré más información al respecto.

Llamado a la acción

Si te ha parecido interesante, comparte este artículo y deja tus comentarios y reacciones. ¡Gracias por tu apoyo!

Back to Blog

Related posts

Read more »

Functions

markdown !Lahari Tennetihttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...