Funciones BIOS e interrupciones DOS: referencia de INT 10h y INT 21h

Informática y TelecomunicacionesActualizado el 18,43 KB

Resumen

Este documento es una referencia de funciones de la BIOS para control de vídeo (INT 10h) y de servicios del DOS (INT 21h) para entrada y salida por teclado y pantalla, control de programas y gestión de vectores de interrupción. Para cada función se indican el código AH o AX, los parámetros de entrada, los valores de salida y los registros afectados.

Puntos clave

  • INT 10h AH=00h activa un modo de vídeo; AH=02h posiciona el cursor con DH=fila, DL=columna y BH=página.
  • INT 10h AH=01h define la forma del cursor; con CX=0607h se obtiene el cursor normal de subrayado en una celda de 8 líneas de scan.
  • INT 10h AH=08h lee el carácter y el atributo de la posición del cursor; AH=09h escribe carácter y atributo CX veces.
  • INT 21h AH=0Bh detecta si hay una tecla disponible (AL=FFh) o no (AL=0).
  • INT 21h AH=08h espera un carácter del teclado sin mostrarlo y lo devuelve en AL en código ASCII.
  • INT 21h AH=0Ah lee una línea de teclado terminada en retorno de carro; el primer byte del búfer indica el máximo de caracteres.
  • INT 21h AH=09h muestra una cadena terminada en el carácter $, que no se imprime.
  • INT 21h AX=4C00h termina el programa y devuelve el control al DOS.

Ponte a prueba

Funciones de la BIOS para Control de Video

Función

Código de Función

Parámetros

Retorno

Activa modo de video

AH = 00

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 = 01

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 = 0607 es el cursor normal de subrayado, CX = 0007 es un cursor de bloque completo. Si el bit 7 de CH está activado, usualmente significa "ocultar el cursor". Así, CX = 2607 es un cursor invisible. Algunas tarjetas de video tienen 16 líneas de scan (00-0f). Algunas tarjetas de video no usan el bit 5 de CH. Con estas, haga inicio > fin (ej. CX = 0706).

Asigna posición del cursor

AH = 02

BH = Página, DH = Fila, DL = Columna

lee la posicion del cursor y su tamaño

a = 03

b = pagina

ax = 0,x = inicio d la linea d scan,cl = fin d la linea d scan,d = fila,dl = columna

lee la posicion delligt pen (no funciona en sistemas vga)

a = 04

a = status (0=no disparado,1=disparado),bx = pixel x,x = pixel y,cx = numero d linea del pixel xa ls mo2 0f-10,d = caracter y,dl = caracter x

selecciona pagina activa d la pantaya

a = 05

al = numero d pagina

scroy up window

a = 06

al = lineas d scroy (0 = borra),b = atributo d ls lineas en blanco

scroy down window

a = 07

al = lineas d scroy (0 = borra),b = atributo d ls lineas en blanco

lee caracter y atributo en la posicion del cursor

a = 08

b = numero d pagina

a = color,al = caracter

escribe caracter y atributo en la posicion del cursor

a = 09

al = caracter,b = numero d pagina,bl = color,cx = numero d veces xa escribir l caracter

escribe caracter solo en la posicion del cursor

a = 0a

al = caracter,b = numero d pagina,bl = color,cx = numero d veces xa escribir l caracter

asigna color d fondo/borde

a = 0b,b = 00

bl = color del fondo/borde (l borde solo en mo2 d texto)

asigna paleta

a = 0b,b = 01

bl = id d paleta (solo fue valido en l cga,xo ls nuevas tarjetas lo soportan en muxos o to2 ls mo2 graficos)

escribe pixel grafico

a = 0x

al = color,b = pagina,cx = x,dx = y

lee pixel grafico

a = 0d

b = pagina,cx = x,dx = y

al = color

salida d teletipo

a = 0e

al = caracter,bl = color (solo en modo grafico)

lee modo d video actual

a = 0f

al = modo d video

escribe string (ega+,lo q significa como minimo 1 pc at)

a = 13

al = modo d escritura,b = pagina,bl = color,cx = longitud del string,d = fila,dl = columna,s:bp = posicion del string


    INT 21H AX = 4C00H

Descripción: Esta rutina finalizará el programa y devolverá el control al DOS. Debe llamar a esta rutina para finalizar los programas. 
Uso:    Entrada:   AX = 4C00H 
            Salida:     Ninguna - Registros afectados:   Ninguno 

Status del teclado    INT 21H AH = 0BH

Descripción: La función de esta rutina es detectar si se ha pulsado una tecla.

Uso:    Entrada:  AH = 0BH 
           Salida:    AL = FF si caracter disponible  AL = 0 si caracter no disponible -  Registros afectados:    AL 

Entrada de un carácter desde teclado

    INT 21H AH = 8H

Descripción: La función de esta rutina es esperar un carácter del teclado sin escribirlo por pantalla y almacenarlo en el 
registro AL en forma de código ASCII.

Uso:    Entrada:   AH = 8H 
            Salida:    AL = car cter ASCII de la tecla pulsada Registros afectados:   AL 

Leer una línea de programa

    INT 21H AH = 0AH

Descripción: La función de esta rutina es la de obtener una línea de datos del teclado (que finaliza al pulsar el retorno de 
carro) y almacenarlos en un  rea de memoria. Los caracteres son mostrados en la pantalla al ser tecleados.

Uso:    Entrada:   AH = 0AH 
                            DS contiene la dirección del segmento de memoria en el cual se almacenan los datos introducidos. 
                            DX contiene la dirección del offset de la zona de memoria del segmento anterior en la que se almacenan 
                            los datos. 
                            En el primer byte del área debe indicarse el máximo número de caracteres a introducir sin superar 255. 
            Salida:     Ninguna en registro 
                            En el segundo byte del área se almacena el número de caracteres tecleados sin contar el retorno de carro. 
            Registros afectados:  Ninguno 

Salida de un carácter por pantalla

    INT 21H AH = 2H

Descripción: La función de esta rutina es visualizar un carácter.

Uso:    Entrada:  AH = 2H 
                            DL contiene el código ASCII del carácter a visualizar. 
            Salida:    Ninguna - Registros afectados:  Ninguno 

Sacar un string a la pantalla

    INT 21H AH = 9H

Descripción: Su función es la de sacar una cadena de caracteres ASCII por pantalla.

Uso:    Entrada:   AH = 9H 
                            DS contiene el valor de la dirección del segmento del comienzo de la cadena de caracteres a sacar. DX contiene el offset de dicha cadena en el segmento anterior. 
                            El último byte de la cadena de caracteres debe ser el caracter $, que no se muestra en pantalla. 
            Salida:      Ninguna -  Registros afectados:   AX 

Establecer nuevo vector de interrupción

    INT 21H AX = 25H

Descripción: Esta rutina establece un nuevo vector de interrupción.

Uso:    Entrada:  DS:DX  Dirección de la rutina de servicio 
                           AL:    Número de la interrupción 
            Salida:   Actualización de la tabla de vectores - Registros afectados:  Ninguno 

Obtiene número de interupción

    INT 21H AX = 35H

Descripción:   Esta rutina devuelve el vector de interrupción del número de interrupción que se especifique en AL.

Uso:    Entrada:  AL  Número de la interrupción 
            Salida:   ES:BX  Vector de la interrupción - Registros afectados:  Ninguno 

Posicionar el cursor

     INT 10H AH = 02H

Entrada:  DH = fila (0-24) DL = columna (0-79) BH = número de página 

Escribir un caracter en pantalla, donde está el cursor

    INT 10H AH = 0AH

Entradas:  BH = número de página  AL = caracter a escribir 

Leer caracter y atributo de la posición actual del cursor

    INT 10H AH = 08H

Entradas:  BH = número de página 
Salidas:    AL = caracter leído  AH = atributo del caracter leído 

Escribir caracter y atributo en la posición actual del cursor

    INT 10H AH = 09H

Entradas:  BH = número de página 
                  BL = atributo del caracter CX = número de caracteres a escribir AL = caracter a escribir 

Descargar

PDF Word HTML

Preguntas frecuentes

¿Cómo se termina un programa en DOS con INT 21h?

Se llama a INT 21h con AX=4C00h. Según el documento, esta rutina finaliza el programa y devuelve el control al DOS, y debe usarse siempre para terminar los programas.

¿Qué devuelve INT 21h AH=0Bh?

Detecta si se ha pulsado una tecla: devuelve en AL el valor FFh si hay un carácter disponible y 0 si no lo hay.

¿Cómo se muestra una cadena con INT 21h AH=09h?

Se carga en DS:DX la dirección de la cadena, que debe terminar en el carácter $. El carácter $ no se muestra en pantalla.

Ponte a prueba

Tarjetas de repaso

Pulsa una tarjeta para ver la respuesta.

Test

1. ¿Qué código AH se usa para posicionar el cursor con INT 10h?
2. ¿Qué devuelve INT 21h AH=08h?
3. ¿Qué indica el primer byte del área de memoria usada por INT 21h AH=0Ah?
4. ¿Qué parámetros recibe INT 21h AX=25h para establecer un vector de interrupción?
5. ¿Qué valor de CX produce un cursor invisible según el documento?

Preguntas generadas con IA a partir del documento: comprueba las respuestas con el texto.