Cambiar Color de Pantalla en ensablador

Bien el dia de hoy mostrare como cambiar el color de pantalla en ensamblador, para ello sera necesario saber unas cosas:

Primero conocer la interrupción 10h: la interrupción 10h nos permite manipular algunas cosas del sistema de video, en este caso trabajaremos directamente con la BIOS.

Asi mismo sera necesario conocer acerca de algunos servicios de dicha interrupción como:

06h : permite manupular el comportamiento de las lineas en blanco en pantalla. En este caso CX es usado para indicar el pixel donde debe inicar a pintar la pantalla y DX indica donde debe terminar de pintar.
02h: permite colocar el cursor en la posición deseada. En este caso el registro BH indica la pagina donde posicionar el cursor (La pantalla esta formada por 6224px, cuando se supera esta cantidad y se sigue escribiendo, apartir del pixel 6225 se dice que estamos en otra pagina y asi sucesivamente), el registro DH indica el renglon y DL la fila donde posicionar el cursor.

Así mismo debemos conocer los colores que podemos utilizar:


Cada color puede ser representado por su parte hexadecimal o binaria. Por ejemplo:

00011110B

Los primeros 4 numeros de derecha a izquierda representan el color que sera para el color de letra, los siguientes 3 representan el color del fondo (para el fondo tenemos solo 8 colores para tomar), el ultimo bit solo es un indicador, si esta en 1 el texto completo en pantalla estara parpadeando.

0:Bit indicador, si esta activo parpadea el texto

001:Color de fondo

1110:Color del texto

De igual forma este valor puede estar en su equivalente a hexadecimal ‭00011110B‬ = 30H, este valor es igual mente valido.

Ahora veamos un ejemplo:


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,00011111B
           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      

Resultado:



Fuentes:
https://tipsparaisc.blogspot.com/2012/04/ensamblador-8086-modo-grafico-13h.html
http://www.forosdelweb.com/f14/colores-ensamblador-537837/
https://lgomezitm.blogspot.com/2018/02/cambio-de-color-en-las-pantallas-con-el.html
https://es.wikipedia.org/wiki/Int_10h
https://solocodigo.com/9497/colores-en-ensamblador/
https://en.wikipedia.org/wiki/BIOS_color_attributes
http://www.esacademic.com/dic.nsf/eswiki/591427

Comentarios