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