Vous êtes sur la page 1sur 4

LABORATORIO DE

PROGRAMACIN EN LENGUAJE ENSAMBLADOR x86-16bits

Video en modo texto. Interrupciones BIOS. Servicios de video (INT 10h)

Objetivo
El objetivo de esta prctica es familiarizarse con los servicios de video que proporciona el BIOS (Basic
Input-Output System) a travs de la interrupcin 10h. Estos servicios se utilizan para determinar el modo de video,
establecer la forma del cursor, situar el cursor en la pantalla, leer la posicin del cursor, seleccionar la pgina activa
de video, hacer scroll, leer carcter y atributo en la posicin del cursor, escribir carcter y atributo en la posicin del
cursor, escribir solamente carcter en la posicin del cursor, asignar color de fondo, leer modo de video, etc.
Para alcanzar este objetivo, se va a trabajar en modo texto (modo de video 03h de 80 columnas por 25 filas
de caracteres por pantalla) llevando a cabo algunas acciones sencillas tales como el borrado de la pantalla
estableciendo el modo de video, la ubicacin del cursor en una celda determinada de la pantalla o la escritura de
caracteres y atributos.

Video en modo texto


Cuando el video est en modo texto, cada celda de la pantalla se define con 2 bytes: el carcter ASCII
(direccin par) y el atributo (direccin impar). El carcter indica qu se va a dibujar en la pantalla mientras que el
atributo indica cmo. El cdigo ASCII del carcter indexa una memoria en la que se guarda la matriz de puntos de
cada carcter. La matriz de cada carcter tiene un nmero de pxeles que depende de la resolucin de la pantalla. El
byte de atributo contiene la siguiente informacin:

7 6 5 4 3 2 1 0

P R G B I R G B

fondo caracter

El nibble de menor peso codifica el color del carcter (RGB) y la intensidad (I). El nibble de mayor peso
codifica el color del fondo (RGB) y el parpadeo (P).

Mapa de memoria de video

En modo texto, el mapa de memoria asignado al video depende de cada modo particular. Para los modos de
video de texto ms comunes los rangos de memoria son:

modo 03h  B800:0000 a B800:3FFF 16KB (80x25 = 2000 caracteres = 4000 bytes  4 pginas)
modo 07h  B000:0000 a B000:7FFF 32KB (80x25 = 2000 caracteres = 4000 bytes  8 pginas)

Si escribimos en la memoria de video directamente veremos cmo cambia la imagen de la pantalla.

Algunos servicios de la interrupcin 10h


La interrupcin 10h de la BIOS (Basic Input-Output System) proporciona varios servicios relativos a la
presentacin en pantalla. Seguidamente se ofrece un resumen con algunos de ellos y ejemplos.
VIDEO EN MODO TEXTO. INTERRUPCIONES BIOS. SERVICIOS DE VIDEO (INT 10H)

Servicio 00h

El servicio 00h establece el modo de video y borra la pantalla. Se pasan los parmetros siguientes:
ah = 00h
al = modo de video (0 255)

Ejemplo:
mov al, 03h ;modo 3 (texto 80x25 16 colores)
mov ah, 00h
int 10h

La tabla siguiente muestra algunos modos de video, su tipo, resolucin y cantidad de colores.
modo tipo resolucin colores
al = 00h texto 40x25 16
al = 03h texto 80x25 16
al = 04h grfico 320x200 4
al = 07h texto 80x25 2
al = 12h grfico 640x480 16
bx = 100h grfico (SVGA) 640x400 256
bx = 101h grfico (SVGA) 640x480 256
bx = 103h grfico (SVGA) 800x600 256
bx = 105h grfico (SVGA) 1024x768 256
bx = 107h grfico (SVGA) 1028x1024 256
bx = 115h grfico (SVGA) 800x600 16M

Servicio 02h

El servicio 02h sita el cursor en una celda de la pantalla en modo texto. Se pasan los parmetros
siguientes:
ah = 02h
dh = fila (0 24)
dl = columna (0 39/79 segn modo vdeo)
bh = pgina (0 3 en modo 1, 0 7 en modo 3); por defecto la pgina activa es la 0

Ejemplo:
mov dh, 12 ;fila 12
mov dl, 20 ;columna 20
mov bh, 0 ;pgina 0
mov ah, 02h
int 10h

Servicio 09h

El servicio 09h escribe un carcter y su atributo en la posicin actual del cursor una o ms veces. Se pasan
los parmetros siguientes:
ah = 09h
al = cdigo ASCII del carcter a escribir
bh = pgina (0 para la pgina activa)
bl = atributo (p. ej.: 07h = normal blanco sobre negro, 0Fh = alta intensidad)
cx = nmero de caracteres a escribir (factor de repeticin)

Ejemplo:
mov bh, 0 ;pgina 0
mov bl, 07h ;atributo blanco sobre negro
mov cx, 04h ;imprime cuatro veces el
mov al, A ;carcter A contenido en al
mov ah, 09h
int 10h

2
LABORATORIO DE PROGRAMACIN EN ENSAMBLADOR X86-16BITS

Servicio 0Ah

El servicio 0Ah escribe un carcter en la posicin actual del cursor sin modificar el atributo actual. Se
pasan los parmetros siguientes:
ah = 0Ah
al = cdigo ASCII del carcter a escribir
bh = pgina (0 para la pgina activa)
cx = nmero de caracteres a escribir (factor de repeticin)

Ejemplo:
mov bh, 0 ;pgina 0
mov cx, 1 ;imprime una vez el
mov al,z ;carcter z contenido en al
mov ah, 0Ah
int 10h

Prcticas
A) Dibujar una diagonal en la pantalla utilizando cualquier carcter y atributo.

Para dibujar una diagonal utilizando cualquier carcter y atributo, tal y como ilustra la figura siguiente,
hemos de utilizar los servicios 00h, 02h y 09h para establecer el modo de video y borrar la pantalla, situar el cursor y
escribir carcter y atributo respectivamente.

**
**
**
**
**
**
**
**
c:>
Figura 1. Diagonal en pantalla en modo texto.

B) Dibujar un rectngulo usando caracteres de caja.

Para dibujar un rectngulo como el de la figura siguiente, se usan los caracteres de caja que representan
lneas horizontales y verticales, esquinas en diferentes posiciones, intersecciones y rellenos de diferentes tipos y
grosores.

c:>

Figura 2. Rectngulo realizado con caracteres de caja.

3
VIDEO EN MODO TEXTO. INTERRUPCIONES BIOS. SERVICIOS DE VIDEO (INT 10H)

A continuacin, se muestra la codificacin en ASCII extendido de los caracteres de caja. Por ejemplo, el
carcter correspondiente a la esquina superior derecha de lnea sencilla () se codifica como 0BFh (B para el
nibble alto y F para el nibble bajo) o, lo que es igual, 191 en decimal.

nibble L
-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
nibble H

B-
C-
D-

Tabla 1. Codificacin de los caracteres de caja en ASCII extendido.

Para realizar la prctica, se sugiere la siguiente declaracin de datos usando caracteres de caja de lnea
sencilla:

.data
esqsupizq DB 218 ;carcter
esqsupder DB 191 ;carcter
esqinfizq DB 192 ;carcter
esqinfder DB 217 ;carcter
barraver DB 179 ;carcter
barrahor DB 196 ;carcter

Se sugiere pintar en primer lugar las esquinas ubicando el cursor y escribiendo el carcter adecuado en cada
caso, luego se pueden pintar las lneas horizontales aprovechando la posibilidad de repetir la escritura de un carcter
sin necesidad de volver a situar el cursor y por ltimo se pintan las lneas verticales ubicando el cursor en cada caso.
Finalmente, se puede rellenar el rectngulo escribiendo el carcter espacio ( 020h).

Vous aimerez peut-être aussi