Gráficos en Ensamblador X86

Josué Acevedo Maldonado
Nabucodonosor Editorial
3 min readMay 6, 2020

Estableciendo colores y formas en pantalla con Ensamblador.

Photo by ThisisEngineering RAEng on Unsplash

A pesar de que los sistemas operativos modernos nos permiten realizar manipulaciones de la pantalla (cambiar la posición del curso, modificar el color, etc.) empleando las interrupciones del BIOS, los fabricantes de terminales implementaron comandos específicos para realizar tales manipulaciones, los cuales son enviados a imprimir a la pantalla como cualquier otro texto, estos son conocidos como códigos de escape.

Por lo útil que resultaba su manejo se popularizo, aunque cada fabricante implemento sus propios códigos de escape, por lo que ANSI resolvió este problema al estandarizar los comandos. Las secuencias de escape ANSI inician con el comando ’ESC’, el cual sirve para indicar que comienza un código de escape, este comando se puede escribir como 27 en decimal, 0x1b en hexadecimal o 033q en octal seguido por el carácter ‘[‘ y el código a utilizar. Aquí encontrara una lista de los comandos posibles.

Uso de los comandos de escape ANSI en Ensamblador.

segment .data

texto db " ----------- texto ------------ "
lontexto equ $-texto
clr db 0x1b, "[33;40m", 0x1b,"[2J", 0x1b,"[5;20f"
; 0x1b indica que los caracteres enviados a la pantalla no
; serán impresos sino ejecutados
; [33;40m establece el color de la fuente en amarillo (3)
; y el color del fondo en negro (0)
; [2J borra toda la pantalla utilizando los colores
; previamente establecidos
; [5;20f coloca el cursor en la fila 5 columna 20
clrlen equ $ - clr
ln db 10,13
lonln equ $-ln
segment .bss
datos resb 2
segment .text
global _start
_start:; envía los códigos de escape ANSI a la pantalla
mov eax, 4
mov ebx, 0
mov ecx, clr
mov edx, clrlen
int 80h
; imprime en pantalla el texto
mov eax, 4
mov ebx, 0
mov ecx, texto
mov edx, lontexto
int 80h
mov eax, 4
mov ebx, 0
mov ecx, ln
mov edx, lonln
int 80h
salir:
mov eax, 1
xor ebx,ebx
int 0x80
impresion en pantalla de un texto con comandos de escape ANSI.

En este ejemplo, se imprime en pantalla un texto en color amarillo con un color de fondo en negro, si quisiésemos dibujar un conjunto de cuadrados colocaríamos el cursor en ubicaciones especificas de la pantalla e imprimiríamos un texto de una cantidad definida de caracteres, con la característica de que el color de letra y el de fondo fuesen iguales.

Josue Acevedo Maldonado es ingeniero de software, trabaja actualmente como consultor.

Conectarse en LinkedIn.

¡Gracias por ser parte de la comunidad!
Puede encontrar contenido relacionado en el canal de YouTube, Twitter, Twitch, Spotify, etc, ademas del libro Ensamblador X86.

Si ha disfrutado de este artículo y siente que ha aprendido algo valioso, por favor compártalo.

¡Gracias por leer!

--

--

Josué Acevedo Maldonado
Nabucodonosor Editorial

Amante de la tecnologia y con pasion en resolver problemas interesantes, consultor, y creador del canal de youtube NEOMATRIX. https://linktr.ee/neomatrix