MAWA - Un lenguaje tan simple como Python pero tan potente como Assembler, el ASM moderno pero mucho más sencillo.
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:
.c/.cpp→.o(compilador).o→.elf(linker).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)
Impimprime 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). FinalLoopmantiene el programa en un bucle infinito para evitar que la CPU lea bytes00y 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!