En esta entrada, veremos lo basico para poder modificar el fondo de la consola de video de ensamblador, asi como el color del texto de cualquier mensaje que enviemos a ella.
Primeramente, debemos saber un poco sobre la interrupcion que usaremos para ello:
Interrupción 10h: Nos permite invocar servicios de video de la ROM BIOS, manipulando algunas de sus funciones.
Los servicios que nos permiten hacer este tipo de cambio de colores son:
Los primeros 4 numeros representan el color que sera para el color de letra, los siguientes 3 representan el color del fondo , el ultimo bit solo es un indicador, si esta en 1 el texto completo en pantalla estara parpadeando.
Primeramente, debemos saber un poco sobre la interrupcion que usaremos para ello:
Interrupción 10h: Nos permite invocar servicios de video de la ROM BIOS, manipulando algunas de sus funciones.
Los servicios que nos permiten hacer este tipo de cambio de colores son:
- 02h: nos permite controlar la posicion de nuestro cursor en la pantalla. Los registros BH,DH y DL son los que usaremos para indicar la posicion en donde debe estar el cursor.
- 06h:Permite inicializar la ventana de video o desplazar su contenido. En este servicio el registro CX indica el pixel donde va a comenzar a cambiar el color y el registro DX indica donde terminara.
Como siguiente punto, debemos saber como es que se representan los colores dentro de emulador.
Cada uno de estos colores al momento de ingresarlos al emulador, podemos representarlo por su parte hexadecimal o binaria:
01011110
0: indicador que nos hara que el texto parpade o no
101: Color de fondo de la pantalla
1110: color del texto en la pantalla.
Ejemplo en un programa:
PILA SEGMENT STACK 'STACK'
DB 100H DUP (?)
PILA ENDS
DATOS SEGMENT
MENSAJE DB 'Se ha cambiado el color de la pantalla$'
DATOS ENDS
CODIGO SEGMENT
ASSUME CS:CODIGO, SS:PILA, DS:DATOS
INICIO:
mov ah,06h
mov bH,11111111B
mov cx,0000h
mov dx,184fh
int 10h
MOV AH,02H ;Para posicionar el cursor
MOV BH,00H ;Coloco en la pagina 0
MOV DX,0000H ;Establesco las coordenadas, x=dh=renglon y=dl=columna
INT 10H ;ejecuto la interrupci?n
MOV AX,DATOS ;Coloco la pila de datos en ax
MOV DS,AX ;paso ax a ds
LEA DX,MENSAJE ;imprimmo el mensaje
MOV AH,9H ;utilizo el servicio 9h para visulizarla en pantalla
INT 21H ;ejecuto llamo a la interrupcion 21h
mov ax,4c00h
int 21h
MOV AX,4C00H
INT 21H
CODIGO ENDS
END INICIO

Comentarios
Publicar un comentario