Int 10h

INT 10h es la forma abreviada de la interrupción 0x10. Esta interrupción controla los servicios de pantalla del PC.

Características

Esta interrupción se utiliza básicamente para mostrar texto en la pantalla (sin llamar a la INT 21h de MS-DOS o INT 80h de linux), para cambiar a modo gráfico, para establecer la paleta de colores, etc...

Lista de funciones soportadas

Función Código de función Parámetros Retorno
Activa Modo de video AH=00h AL = Modo de video AL = Bandera del Modo de video / byte del modo del controlador de CRT
Asigna forma del cursor de modo de texto AH=01h CH = Fila inicial de scan, CL = Fila final de scan

Normalmente una celda de carácter tiene 8 líneas de scan, 0-7. Así, CX=0607h es el cursor normal de subrayado, CX=0007h es un cursor de bloque completo. Si el bit 7 de CH es activado, esto usualmente significa "Oculta el cursor"". Así CX=2607h es un cursor invisible.

Algunas tarjetas de video tienen 16 líneas de scan, 00h-0Fh.

Algunas tarjetas de video no usan el bit 5 de CH. Con estas, haga Inicio > Fin (ej. CX=0706h)

Asigna posición del cursor AH = 02h BH = Página, DH = Fila, DL = Columna
Lee la posición del cursor y su tamaño AH = 03h BH = Página AX = 0, CH = Inicio de la línea de scan, CL = Fin de la línea de scan, DH = Fila, DL = Columna
Lee la posición del light pen (No funciona en sistemas VGA)AH = 04h AH = Status (0=no disparado, 1=disparado), BX = Pixel X, CH = Pixel Y, CX = número de línea del pixel para los modos 0Fh-10h, DH = Carácter Y, DL = Carácter X
Selecciona Página activa de la pantalla AH = 05h AL = Número de Página
Scroll up window AH = 06h AL = Líneas de scroll (0 = Borra), BH = Atributo de las líneas en blanco
Scroll down window AH = 07h AL = Líneas de scroll (0 = Borra), BH = Atributo de las líneas en blanco
Lee carácter y atributo en la posición del cursor AH = 08h BH = Número de Página AH = Color, AL = Carácter
Escribe carácter y atributo en la posición del cursor AH = 09h AL = Carácter, BH = Número de Página, BL = Color, CX = Número de veces para escribir el carácter
Escribe carácter solo en la posición del cursor AH = 0Ah AL = Carácter, BH = Número de Página, CX = Número de veces para escribir el carácter
Asigna color de fondo/borde AH = 0Bh, BH = 00h BL = Color del fondo/borde (el borde solo en modos de texto)
Asigna paleta AH = 0Bh, BH = 01h BL = ID de Paleta (solo fue válido en el CGA, pero las nuevas tarjetas lo soportan en muchos o todos los modos gráficos)
Escribe pixel gráfico AH = 0Ch AL = Color, BH = Página, CX = X, DX = Y
Lee pixel gráfico AH = 0Dh BH = Página, CX = X, DX = Y AL = Color
Salida de teletipo AH = 0Eh AL = Carácter, BL = Color (solo en modo gráfico)
Lee modo de video actual AH = 0Fh AL = Modo de video
Escribe string (EGA+, lo que significa como mínimo un PC AT)AH = 13h AL = Modo de escritura, BH = Página, BL = Color, CX = Longitud del string, DH = Fila, DL = Columna, ES:BP = Posición del string

Tabla de modos de vídeo

ModoResoluciónColoresTipo
AL = 00h40x2516Texto
AL = 01h40x2516Texto
AL = 02h80x2516Texto
AL = 03h80x2516Texto
AL = 04h320x2004Gráfico
AL = 05h320x2004Gráfico
AL = 06h640x2002Gráfico
AL = 07h80x252Texto
AL = 0Dh320x20016Gráfico
AL = 0Eh640x20016Gráfico
AL = 0Fh640x3502Gráfico
AL = 10h640x3504Gráfico EGA 64 KB
AL = 10h640x35016Gráfico EGA menor de 64 KB y VGA
AL = 11h640x4802Gráfico
AL = 12h640x48016Gráfico
AL = 13h320x200256Gráfico
BX = 100h640x400256Gráfico (SVGA)
BX = 101h640x480256Gráfico (SVGA)
BX = 102h800x60016Gráfico (SVGA)
BX = 103h800x600256Gráfico (SVGA)
BX = 104h1024x76816Gráfico (SVGA)
BX = 105h1024x768256Gráfico (SVGA)
BX = 106h1028x102416Gráfico (SVGA)
BX = 107h1028x1024256Gráfico (SVGA)
BX = 113h800x60032KGráfico (SVGA)
BX = 114h800x60064KGráfico (SVGA)
BX = 115h800x60016MGráfico (SVGA)

Lista de servicios de la INT 10h

AH = 00hVídeoEstablecer modo de vídeo
AH = 01hVídeoEstablecer el tamaño del cursor
AH = 02hVídeoPosicionar el cursor
AH = 03hVídeoObtener posición y tamaño del cursor
AH = 04hVídeoObtener posición del lápiz óptico (excepto VGA)
AH = 06hVídeoSubir línea
AH = 07hVídeoBajar línea
AH = 0Bh BH=00hVídeoEstablecer color de fondo o borde
AH = 0Bh BH=01hVídeoEstablecer paleta gráfica
AH = 0ChVídeoEscribir pixel gráfico
AH = 0DhVídeoLeer pixel gráfico
AH = 0EhVídeoFunción TeleType (escribir caracteres en la pantalla)
AH = 0FhVídeoObtener el modo de vídeo
AX = 1100hVídeoCambiar fuente de vídeo (Modo Texto)
AX = 4F02hSVGAEstablecer modo de vídeo SVGA
AX = 4F03hSVGAObtener modo de vídeo SVGA

INT 10h AX=1100h - Cambiar fuente de vídeo (Modo Texto)

Parámetros:

AX=1100hCambiar fuente de vídeo (Modo Texto)
ES:BPDirección de la tabla de caracteres nuevos
CX = ??Número de caracteres a cambiar
DX = ??Número del carácter ASCII desde donde se empieza a cambiar las fuentes
BH = ??Bloque a leer en el mapa 2
BL = ??Número de bytes por carácter

Retorna: Nada

Ejemplo:

ORG 100h 
;Este ejemplo carga una letra A personalizada
;Para probarlo ejecutar el programa en MS-DOS 

push ds 	 ;Asegurar que DS=ES
pop es				 

mov ax,1100h	;Funcion de cargar caracteres
mov bp,caract	;Tabla de caracteres
mov cx,1 	 ;Cargar 1 carácter
mov dx,61	 ;Cambiar el carácter 61
mov bh,14	 ;14 bytes por carácter
xor bl,bl	 ;Bloque 0
int 10h 	 ;Llamamos a la INT 10h

mov ah,0Eh ;Funcion teletype
mov al,61 ;Mostrar el carácter cambiado
int 10h 	 ;Llamamos a la INT 10h

int 20h ;Volvemos a MS-DOS 

caract: ;Tabla de caracteres 

        db	11111111b ;Dibujo en binaro de nuestra "A" personalizada
	db	11111111b
	db	11000011b
	db	11000011b
	db	11000011b
	db	11111111b
	db	11111111b
	db	11000011b
	db	11000011b
	db	11000011b
	db	11000011b
	db	11000011b
	db	11000011b
	db	11000011b

INT 10h AH=0Eh - Función TeleType

Parámetros:

AH = 0EhFunción TeleType
AL = ??Carácter a escribir
BH = ??Número de página
BL = ??Color de fondo (solo en modo gráfico)

Retorna: Nada

Ejemplo:

inicio:
    XOR AX,AX              ; AX=0
    MOV AL,03h             ; Modo de texto 80x25x16
    INT 10h                ; Llamamos a la INT 10h

    LEA SI,holamundo       ; Cargamos en SI la dirección de memoria efectiva de la constante
    CALL escribir_cadena   ; Llamamos a la función de escribir la variable en pantalla

    INT 16h                ; Pedimos una tecla (AH=0)
    HLT                    ; Paramos la ejecución

escribir_cadena: 
    PUSH AX                ; Guardamos los registros AX y SI en la pila
    PUSH SI                ;

siguiente_caracter: 
    MOV AL,[SI]            ; Movemos la siguiente o primera letra de la variable de SI a AL 
    CMP AL,0               ; ¿Hemos terminado de escribir en pantalla?
    JZ terminado           ; Saltamos si es 0, entonces hemos terminado de escribir

    INC SI                 ; Incrementamos el valor de SI (Siguiente carácter)
    MOV AH,0Eh             ; Función TeleType
    INT 10h                ; Llamamos a la interrupción 10h
    JMP siguiente_caracter ; Hacemos un bucle para escribir el siguiente carácter

terminado:
    POP SI                 ; Liberamos los registros SI y AX de la pila
    POP AX                 ;
    RET                    ; Salimos de la función

holamundo db Hola Mundo!",0Dh,0Ah,0 ; Variable con la cadena de texto
                                      ; 0Dh y 0Ah se usan para un salto de linea
                                      ; y 0 para indicar que es el final de la linea

Véase también

Enlaces externos

Este artículo ha sido escrito por Wikipedia. El texto está disponible bajo la licencia Creative Commons - Atribución - CompartirIgual. Pueden aplicarse cláusulas adicionales a los archivos multimedia.