INTERRUPCIONES DEL BIOS
Este pequeño Manual cubre las interrupciones del BIOS de la 00H a la 1BH. Existen
otras operaciones que sólo pueden ser ejecutadas por el BIOS, y que no son tratadas
aquí.
INT 00H: División entre cero. Llamada por un intento de dividir entre cero. Muestra
un mensaje y por lo regular se cae el sistema. Los desarrolladores de programas están
familiarizados con este error por que el borrado de un registro de segmento puede
causarlo de manera accidental.
INT 01H: Un sólo paso. Usado por DEBUG y otros depuradores para permitir
avanzar por paso a través de la ejecución de un programa.
INT 02H: Interrupción no enmascarable. Usada para condiciones graves de
hardware, tal como errores de paridad, que siempre están habilitados. Por tanto un
programa que emite una instrucción CLI (limpiar interrupciones) no afecta estas
condiciones.
INT 03H: Punto de ruptura. Usado por depuración de programas para detener la
ejecución. Los comandos Go y Proceed colocan esta interrupción en el punto de
detención apropiado en el programa; DEBUG deshace el modo de un solo paso y
permite al programa ejecutarse de forma normal como hasta la INT 03H, en donde
DEBUG restablece el modo de paso sencillo.
INT 04H: Desbordamiento. Puede ser causado por una operación aritmética, aunque
por lo regular no realiza acción alguna.
INT05H: Imprime y actualiza la hora del sistema y (si es necesario) la fecha. Un
chip temporizador programable genera una interrupción cada 54.9254 milisegundos,
casi 18.2 veces por segundo
INT 09H: Interrupción del teclado. Provoca por presionar o soltar una tecla en el
teclado; descrita en el 11.
INT 0BH, INT 0CH: Control del dispositivo serial. Controla los puertos COM1 y
COM2, respectivamente.
INT 0DH, INT 0FH: Control del dispositivo paralelo. Controla los puertos LPT1 y
LPT2, respectivamente
INT 0EH: Control del disco flexible. Señala actividad de disco flexible, como la
terminación de una operación de E/S.
INT 10H: Despliegue en Video. Acepta el número de funciones en el AH para el
modo de pantalla, colocación del cursor.
INTERRUPCIÓN 10H DEL BIOS PARA MODO TEXTO.
La INT 10H también tiene otros servicios (disponibles por medio de la función en el
AH) para facilitar el manejo de toda la pantalla. La interrupción conserva el contenido
de los registros BX, CX,DX,DI,SI y BP, pero no el AX, algo que debe recordar si
utiliza la INT 10H en un ciclo.
Las secciones siguientes describen cada función.
INT 10H, función 00H: Establece modo de video
Como describió antes, esto establece al AL con el modo, por lo común 03 para color o
07 para monocromático. ver figura 10-1.
INT 10H, función 01H: Establece el tamaño del cursor
El cursor no es parte del conjunto de caracteres ASCII y sólo existe en modo de texto.
La computadora mantiene su característico hardware para control del cursor, con
operaciones especiales INT para su uso. El símbolo del cursor normal es similar a un
carácter de subrayado, pero puede utilizar la función 01H de la INT para ajustar el
tamaño vertical del cursor. Establezca estos registros:
• CH (bits 4-0) = parte superior del cursor (“línea inicial de rastreo”).
• CL (bits 4-0) = parte inferior del cursor (“línea final de rastreo”).
Puede ajustar el tamaño del cursor entre la parte superior y la inferior: 0:14 para VGA,
0:13 para monocromático y EGA y 0:7 para CGA. Para un VGA, el código siguiente
agranda el cursor desde la parte superior hasta la inferior:
MOV AH,01H ; Petición para designar el tamaño del
cursor
MOV CH,00 ; Línea inicial de rastreo
MOV CL,14 ; Línea final de rastreo
INT 10H ; Llama al BIOS
Ahora el cursor parpadea como un rectángulo relleno. Puede ajustar su tamaño a
cualquiera entre los límites establecidos, por ejemplo, 04:08, 03:10, etc. El cursor
conserva sus atributos hasta que otra operación los cambie. Usando 0:14 (VGA), 12:13
(monocromático o EGA) o 6:7 (CGA) se establece el cursor normal. Si no está seguro
de los límites en su monitor, primero intente ejecutar una función 03h con DEBUG.
INT 10H, función 02H: Establece la posición del cursor
Esta útil operación coloca el cursor en cualquier parte de la pantalla, de acuerdo con las
coordenadas renglón: columna. Establezca estos registros:
• BH = Número de página, para modo de texto con 80 columnas, puede ser 0 (por
omisión), 1,2 o3.
• DH = Renglón
• DL = Columna
La posición del cursor en cada página es independiente de su posición en las otras
páginas. Ese código coloca al cursor en el renglón 5, columna 20, para la página 0:
MOV AH,02H ;Petición para designar el cursor
MOV BH,00 ;Página número 0
MOV DH,05 ;RENGLÓN
INT 10H ;Llama al BIOS
INT 10H, función 03H: Lee la posición del cursor
Un programa puede utilizar la función 03H para determinar el renglón, columna y
tamaño actuales del cursor, en particular en situaciones en donde un programa tiene que
utilizar la pantalla por un momento y tiene que guardar y restaurar la pantalla original.
Coloque el número de página en el BH, sólo para la función 02H:
MOV AH,03 ; Petición de colocar el cursor
MOV BH,00 ; Número de página 0 (normal)
INT 10H ; Llama al BIOS
La operación regresa estos valores:
• AX y BX = Sin cambio
• CH = Línea de rastreo inicial del cursor
• CL = Línea de rastreo final del cursor
• DH = Renglón
• DL = Columna
El ejemplo siguiente utiliza la función 03H para leer el cursor y determinar su
posición y tamaño y después usa la función 02H para avanzar a la columna
siguiente en la pantalla:
MOV AH,03H ;Petición de posición del cursor
MOV BH,00 ; Página 0
INT 10H ; Llama al BIOS
MOV AH,02H ; Coloca el cursor
INC DL ; en la columna siguiente
INT 10H ; Llama al BIOS
INT 10H, función 05H: Selección de página activa
La función 05h permite establecer la página que será desplegada para los modos de
texto 0-3 y 13-16. Puede crear páginas diferentes y pedir pasar de una página a otra. Las
páginas en modo de 80 columnas son 0-3. Aquí está el código para esta función:
MOV AH,05H ;Petición de página activa
MOV AL,#pág ; Número de página
INT 10H ; Llama al BIOS
INT 10H, función 06H: Recorrer hacia arriba la pantalla
Cuando un programa de manera inadvertida despliega texto hacia bajo de la pantalla
después de la parte inferior, la línea siguiente “sale” del inicio de la parte superior. Pero
aún si la operación de interrupción especifica la columna cero, las líneas nuevas llevan
sangría y las líneas subsecuentes pueden estar mal alineadas. La solución es recorrer la
pantalla, de manera que las líneas desplegadas “salgan” por la parte superior y líneas en
blanco aparezcan en la parte inferior.
Colocar un número cero en el AL provoca que toda la pantalla se recorra hacia arriba, y
en realidad se limpie. Establecer un valor diferente de cero en el AL provoca que ese
número de línea se recorra hacia arriba. Cargue los registros siguientes:
• AL = Número de líneas o cero para toda la pantalla
• BH = Atributo
• CX = Renglón: columna iniciales
• DX = Renglón: columna finales
El código siguiente recorre toda la pantalla una línea y establece un atributo de
color:
MOV AX,0601H ; Recorre hacia arriba una línea
MOV BH,03H ; Fondo en cían, con prime plano en
juego
MOV CX,000 ; Hasta 24,79 (pantalla completa)
INT 10H ; Llama al BIOS
A continuación está el enfoque estándar para recorrer una sola línea:
1 Definir un elemento con nombre, por ejemplo ROW, incivilizado en cero, para
establecer la posición del renglón del cursor.
2 Desplegar una línea y avanzar el cursor a la línea siguiente.
3 Examinar para ver si ROW está cercano a la parte inferior de la pantalla (CMP
ROW,22).
4 Si no es así, incrementar ROW (INC ROW) y salir.
5 Si es cierto, recorrer una línea, utilice ROW para colocar el cursor y hacer ROW
igual a 00.
Los registros CX y DX permiten recorrer cualquier parte de la pantalla. Pero sea muy
cuidadoso al hacer corresponder el valor de AL con la distancia en el CX:DX, en
especial cuando haga referencia a una parte de la pantalla. Las instrucciones
siguientes recorren cinco líneas, y en realidad crean una ventana en el centro de la
pantalla con sus propios atributos:
MOV AX,0605H ; Recorre cinco líneas
MOV BH,61H ; Fondo café, con primer plano azul
MOV CX,0A1CH ; Desde el renglón 10, columna 28
MOV DX,0E34H ; hasta el renglón 14, columna 52 (parte de
pantalla)
INT 10H ; Llama al BIOS
El ejemplo especifica un recorrido de cinco líneas, que es el mismo número que
la distanciaentre los renglones 10 y 14. Ya que el atributo para una ventana
permanece hasta que otra operación lo cambie, al mismo tiempo puede
establecer varias ventanas con diferentes atributos.
INT 10H, función 07H: Recorrer hacia abajo la pantalla
Para modo de texto, el recorrido hacia abajo de la pantalla provoca que las líneas
inferiores desaparezcan por la parte inferior y aparezcan líneas en blanco en la parte
superior. Cargue los registros siguientes igual que la función 06H (recorrido hacia
abajo):
• AL = Número de líneas, o cero para la pantalla completa
• BH = Atributo
• CX = Renglón: columna iniciales
• DX = Renglón: columna finales
INT 10H, función 08H: Leer atributo o carácter en la posición del cursor
La función 08H puede leer tanto un carácter como su atributo del área de despliegue de
video en los modos de texto o gráfico. Cargue el número de página normalmente, en el
BH, como lo muestra el ejemplo siguiente:
MOV AH,08H ; Petición de leer atributo o carácter
MOV BH,00 ; Número de página 0 (normal)
INT 10H ; Llama al BIOS
La operación regresa el carácter en el AL y su atributo en el AH. En modo gráfico, para
un carácter no ASCII la operación regresa 00H. Puesto que sólo se lee un carácter a la
vez, tiene que codificar un ciclo para leer una sucesión de caracteres.
INT 10H, función 09H: Desplegar atributo o carácter en la posición del cursor
Aquí está una operación divertida que despliega caracteres en modo de texto o gráfico
con intermitencia, en video inverso y todo eso. Establezca los registros:
• AL = Un sólo carácter ASCII que será desplegado cualquier número de veces
• BH = Número de página
• BL = Atributo
• CX = Número de veces que la operación despliega de manera repetida el carácter
que está en el
A continuación veremos un ejemplo que despliega 80 guiones y establece un
atributo de color:
MOV AH, 09H ; Petición de despliegue
MOV AL, ‘-’ ; Carácter que se despliega
MOV BH, 0 ; Página número 0
MOV BL, 61H ; Fondo café, primer plano azul
MOV CX, 80 ; 80 caracteres repetidos
MOV 10H ; Llama al BIOS
El despliegue de caracteres diferentes requiere un ciclo. En modo de texto, pero no en el
gráfico, los caracteres desplegados de manera automática van de una línea a la
siguiente. Para desplegar una indicación o un mensaje, codifique una rutina que
establezca el CX en 01 y cree un ciclo para mover un carácter a la vez desde la memoria
al AL. (Como el CX está ocupado, no se puede usar con facilidad la instrucción LOOP.)
También, después de desplegar cada carácter, utilice la función 02H de la INT 10H,
para avanzar el cursor a la columna siguiente.
INT 10H, función 0AH: Despliega un carácter en la posición del cursor
Esta operación despliega un carácter en modo de texto o gráfico. La única diferencia
entre las funciones 0AH y 09H en modo de texto es que la función 0AH utiliza el
atributo actual, mientras que la función 09H establece el atributo. Aquí está el código
para esta función:
MOV AH, 0AH ; Petición de despliegue
MOV AL, carácter ; Carácter que se despliega
MOV BH, #página ; Número de página
MOV CX, repetición ; Número de caracteres repetidos
INT 10H ; Llama al BIOS
Con frecuencia, las funciones de la INT 21H del DOS que puede imprimir cadenas de
caracteres y responder a los caracteres de control de la pantalla son mas adecuados que
las operaciones del BIOS.
INT 10H, función 0EH: Escribir en teletipo
Esta operación le permite utilizar un monitor como terminal para despliegue simple.
Establezca la función 0EH en el AH, el carácter para desplegar en el AL, el número de
página en el BH y el color del primer plano (modo gráfico) en el BL:
MOV AH, 0EH ; Petición para desplegar
MOV AL, carácter ; Carácter que se despliega
MOV BH, #página ; Número de página activa (algunos
sistemas)
MOV BL, color ; Color del primer plano (modo gráfico)
INT 10H ; Llama al BIOS
Los caracteres de control de retroceso (08H), campana (07H), retorno de carro (0DH) y
avance de línea (0AH) actúan como comandos para formatear la pantalla. De forma
automática, la operación avanza el cursor y cuando llega al final de la línea, envía los
caracteres a la línea siguiente, recorre la pantalla y mantiene los atributos presentes de la
pantalla.
INT 10H, función 0FH: Obtiene el modo actual de video
Utilice esta función para determinar el modo actual de video. (Véase la función 00H.)
Aquí está un ejemplo:
MOV AH, 0FH ; Petición de modo de video
INT 10H ; Llama al BIOS
CMP AL, 03 ; Si el modo es 3,
JE ... ; entonces saltar
La operación regresa estos valores:
• AL = Modo actual de video
• AH = Caracteres por línea (20, 40 u 80, en donde 50H - 80)
• BH = Número de pagina actual
INT 10H, función 11H: Generador de carácter
Esta complicada función para los sistemas EGA, MCGA y VGA inicia un modo
establecido y restaura el ambiente de video. Una discusión está fuera del alcance de esta
obra.
INT 10H, función 12H: Selecciona la rutina alterna de pantalla
Esta función permite usar monitores EGA y VGA. Para obtener información sobre
cualquiera de estos monitores, cargue 10H en el BL; la operación regresa:
• BH = 00H para color y 01H para monocromático
• BL = 00H para 64K, 01H para 128K, 02H para 192K y 03H para 256K
• CH = Bits del adaptador
• CL = Configuración de conmutación
La operación permite usar varias funciones elaboradas para las computadoras dl tipo
PS/2, tal que 30H (selecciona líneas de rastreo), 31H (carga la paleta por omisión) y
34H (emulación de un cursor).
INT 10H, función 13H: Despliega una cadena de caracteres
Para monitores EGA y VGA, esta operación despliega cadenas con opciones de
establecer el atributo y mover el cursor y actúa sobre los caracteres de control de
retroceso, campana, retorno de carro y avance de línea. Los registros AS:BP deben
contener la dirección segmento: desplazamiento de la cadena que despliega. El código
es como sigue:
MOV AH, 13H ; Petición para desplegar
MOV AL, subfunción ; 0, 1, 2 o 3
MOV BH, #página ; Número de página
MOV BL, atributo ; Atributos de la pantalla
LEA BP, dirección ; Dirección de la cadena en ESBP
MOV CX, longitud ; Longitud de la cadena de caracteres
MOV DX, pantalla ; Posición relativa de inicio en la pantalla
INT 10H ; Llama al BIOS
Las cuatro subfunciones en el AL son:
00 Despliega el atributo y la cadena; no avanza el cursor.
01 Despliega el atributo y la cadena; avanza el cursor.
02 Despliega el carácter y después el atributo, no avanza el cursor.
03 Despliega el carácter y después el atributo; avanza el cursor.
INTERRUPCIÓN 10H DEL BIOS PARA GRÁFICOS.
La INT 10H facilita el manejo completo de la pantalla para modo gráfico y modo de
texto, como vimos. La operación preserva el contenido de los registros BX, C, DX, DI,
SI y BP, pero no el de AX. Las secciones siguientes describen cada una de las
funciones de la INT 10H.
INT 10H, función 00H: Establece el modo de video
La función 00H en el AH y el modo 12H en el AL establecen el modo estándar gráfico
en color para la VGA:
MOV AH, 00H ;Petición para designar el modo
MOV AL, 12H ;Con resolución 640 x 480 vga
INT 10H ;Llama al BIOS
Establecer el modo gráfico hace que el cursor desaparezca.
INT 10H, función 04H: Lee la posición de la pluma óptica
Utilice esta función con gráficos para determinar el estado de una pluma óptica. La
operación regresa la información siguiente:
AH 0 si el estado es no funcionando, y 1 si es funcionando.
DX Renglón en el DH y columna en el DL.
CH/BX Posición de pixel, con línea (horizontal) de la malla en el
BH y columna o
punto en el BX.
INT 10H, función 08H: Lee el atributo o carácter en la posición del cursor.
Esta función puede leer los caracteres y los atributos desde el área de despliegue tanto
en modo de texto como en modo gráfico.
INT 10H, función 09H: Despliega atributo o carácter en la posición actual del
cursor
Para modo gráfico, utilice el BL para definir el color del primer plano. Si el bit 7 es
cero, el color definido reemplaza los colores actuales presentes de pixeles; si el bit 7 es
uno, el color definido es combinado (se le aplica un XOR) con ellos. Para detalles, vea
la sección anterior, “Interrupción 10H del BIOS para el modo de texto”.
INT 10H, función 0AH: Despliega un carácter en la posición del cursor
Utilice esta función para establecer la paleta de colores y desplegar un carácter gráfico.
El número en el BH (00 o 01) determina el propósito del registro BL:
1. BH = 00. Selecciona el color del fondo, en donde el BL contiene el número del
color en los bits 0-3 (cualquiera de 16 colores):
MOV AH, 0BH ; Petición
MOV BH, 00 ; fondo
MOV BL, 04 ; color rojo
INT 10H ; Llama al BIOS
2. BH = 01. Selecciona la paleta para gráficos, en donde BL contiene la paleta (0 o 1):
MOV AH, 0BH ; Petición de color
MOV BH, 01 ; Selecciona la paleta
MOV BL, 00 ; número 0 (verde, rojo, café)
INT 10H ; Llama al BIOS
Una vez que selecciona una paleta, permanece activa. Pero cuando cambia la paleta,
toda la pantalla cambia a esa combinación de colores. Si utiliza la función 0BH
mientras está en modo texto, el número establecido para el color 0 de la paleta
determina el color del borde.
INT 10H, función 0CH: Escribe un pixel punto
Utilice la función 0CH para desplegar un color seleccionado (fondo y paleta).
Establezca estos registros:
• AL = Color del pixel
• BH = Número de página (EGA o VGA)
• CX = Columna
• DX = Renglón
El número mínimo para la columna o el renglón es 0 y el número máximo depende del
modo de video. El ejemplo siguiente establece un pixel en la columna 50, renglón 70 en
la pantalla:
MOV AH, 0CH ; Petición para escribir un punto
MOV AL, 03 ; Color del pixel
‘ MOV BH, 0 ; Página número 0
MOV CX, 50 ; Posición horizontal (columna)
MOV DX, 70 ; Posición vertical (registro)
INT 10H ; Llama al BIOS
EGA/VGA modos ODH, 0EH, 0FH y 10H proporcionan 8, 4, 2 y 2 páginas de área de
despliegue de video, respectivamente. La página por omisión es la número 0.
INT 10H, función 0DH: Lee un pixel
Esta operación, la opuesta de la función OCH, lee un punto para determinar el número
de su color. Establezca el BH con el número de página (EGA o VGA), el CX con la
columna y el DX con el renglón. El número mínimo para la columna o el renglón es
cero y el máximo depende del modo de video. La operación regresa el color del pixel en
el AL.
INT 10H, función 0EH: Escribe un teletipo
Véase en “Interrupción 10H del BIOS para el modo de texto”.
INT 10H, función 10H: Establece los registros de la paleta
Esta función maneja los sistemas EGA y VGA. Un código de subfunción en el AL
determina la operación:
00 Establece un registro de paleta, donde BH contiene el número a
establecer y el BL el registro a establecer.
01 Establece el registro de rastreo, donde el BH contiene el número que se establece.
02 Establece todos los registros de paletas y de rastreo, ES:DX apunta a una tabla de
17 bytes, en donde los bytes 0-15 son números de paleta y el byte 16 es el número
de rastreo.
03 Conmuta el bit para intensificar/intermitencia, donde 00 en el BL permite
intensificar y 01 permite intermitencia.
Otros códigos de subfunciones AL para el VGA bajo la función 10H son 07H (lee
registro individual de la paleta), 08H (lee el registro de rastreo), 09H (lee todos los
registros de la paleta y de rastreo), 10H (establece un registro individual de color), 12H
(establece un bloque de registros de color), 13H (selecciona una página de color), 15H
(lee un registro individual de color), 17H (lee un bloque de registros de color) y 1AH
(lee el estado de la página de color).
INT 10H, función 1AH: Código de combinación de despliegue de lectura / escritura
Esta operación regresa los códigos que identifican el tipo de despliegue que está en uso.
INT 10H, función 1BH: Regresa la información de funcionalidad/ estado
Esta complicada operación regresa la información a un bufer de 64 bytes identificando
el modo de video, tamaño del cursor, página a la que se le da soporte y así
sucesivamente.
INT 10H, función 1CH: Guarda o restaura el estado de video
Esta función guarda o restaura el estado de video, incluyendo el estado de los registros
de color, el área de datos del BIOS y el hardware del video.
INT 11H: Determinación del equipo. Determina los dispositivos opcionales en el
sistema y regresa el valor en la localidad 40:10H del BIOS al AX, (A la hora de
encender el equipo, el sistema ejecuta esta operación y almacena el AX en la localidad
40:10H.
AREA DE DATOS DEL BIOS
El BIOS mantiene su propia área de datos de 256 bytes (100H) en memoria baja,
empezando en la dirección de segmento 40[0]H. Un útil ejercicio es utilizar DEBUG
para examinar estos campos.
A continuación están listados por desplazamiento.
Area de datos del puerto seriales
00H-07H Cuatro palabras, direcciona hasta cuatro puertos seriales
Area de datos del puerto paralelo
08H-0FH Cuatro palabras, direcciona hasta cuatro puertos paralelos
Area de datos del equipo del sistema
10H-11H Estado del equipo, una indicación primitiva del estado de los
dispositivos instalados. Puede emitir la INT 11H, que regresa lo siguiente en el
AX.
me falta
INT 12H: Determinación del tamaño de la memoria. En el AX, regresa el tamaño
de la memoria de la tarjeta del sistema, en términos de kilobytes contiguos, tal que:
memoria de 640K es 0280H, como se determinó durante el encendido.
INT 13H: Entrada/salida de disco. Acepta varias funciones en el AH para el estado
del disco, sectores leídos, sectores escritos, verificación, formato y obtener diagnóstico.
La mayoría de las operaciones del BIOS son para expertos desarrolladores de software
que están conscientes del peligro potencial por el mal uso. También las versiones del
BIOS pueden variar de acuerdo con el procesador utilizado o aun por el modelo de
computadora.
Aquí se muestra las siguientes funciones de la INT 13H del BIOS.
FUNCIONES PARA DISCO FLEXIBLE FUNCIONES PARA
DISCO DURO
00H Restablecer sistema de disco flexible 00H Restablecer
sistema de disco
01H Leer estado del disco flexible 01H Leer estado del disco
02H Leer sectores 02H Leer sectores
03H Escribir sectores 03H Escribir sectores
04H Verificar sectores 04H Verificar sectores
05H Formatear pistas 05H Formatear pistas
08H Obtener parámetros de la unidad 08H Obtener parámetros de
la unidad
15H Obtener tipo de disco 09H Inicializar unidad
16H Cambiar estado del disco 0AH Leer sector ampliado
del bufer
17H Establecer tipo de disco 0BH Escribir sector
ampliado del bufer
18H Establecer tipo de medio para formatear 0CH Buscar cilindro
0DH Restauración alterna de
disco
0EH Leer bufer del sector 15H Obtener tipo de disco
0FH Escribir bufer del sector 19H Estacionar las cabezas
del disco
OPERACIONES BÁSICAS DEL BIOS PARA DISCO
Esta sección cubre las funciones básicas para disco de la INT 13H. Cada una necesita un
código de función en el registro AH.
INT 13H, función 00H: Restablecer el sistema de disco flexible
Utilice esta operación después de que la operación anterior ha reportado un error grave.
La operación realiza una reinicialización del controlador de disco flexible o del disco
duro. Esto es, la siguiente vez que la unidad es accesada, primero se coloca en el
cilindro 0. En un disco flexible, establezca el DL al número de la unidad (0 = unidad A,
etc.). En disco duro, establezca el Dl a un número de 80H o superior (80H = la primera
unidad, 81H = la segunda, etc.). Un ejemplo del uso de la función 00H es como sigue:
MOV AH, 00H ; Petición para establecer el disco
MOV DL, 80H ; Disco duro
INT 13H ; Llama al BIOS
Una operación válida pone en cero la bandera de acarreo; un erros la pone en uno y
regresa un código de estado en el AH. La función 0DH es una operación relacionada.
INT 13H, función 01H: Leer estado del disco
Esta operación le da otra elección para examinar el estado de la mayoría de las más
recientes operaciones en disco. Establezca el DL al código usual (0 = unidad A, etc.)
para disco flexible y un número de 80H o más (80H = primer unidad, etc.) para disco
duro. Esta operación regresa al AL el código de estado que la última operación en el
disco habría regresado al AH. La operación siempre debería ser válida , y pone en cero
la bandera de acarreo y regresa a su propio código de estado, 00H, en el AH.
INT 13H, función 02H: Leer sectores
Esta operación lee un número especificado de sectores en la misma pista y de manera
directa los envía a la memoria. Inicialice los registros siguientes:
AL Número de sectores, hasta el máximo por pista
CH Número de pista (los números inician con cero)
CL Bits 7-6 número de pista (bits superior)
Bits 5-0 número de sector inicial (los números inician con 1)
DH Número de cabeza (lado) (0 o 1 para disco flexible)
DL Número de unidad para disco flexible (0 = A) o unidad de disco duro
(80H o mayor)
ES:BX Dirección de un bufer de E/S en el área de datos, debe ser
suficientemente grande para todos los sectores que sean leídos. (En este
caso BX está sujeto al ES)
INT 13H, función 03H: Escribir sectores
Esta operación, la opuesta de la función 02H, escribe un área especificada desde la
memoria (512 bytes o un múltiplo de 512) sobre sectores designados formateados.
Carga los registros y maneja el procesamiento igual que la función 02H. Una operación
valida pone en cero la bandera de acarreo y envía al AL el número de sectores que
fueron escritos. El contenido de los registros DS, BX, CX y DX son preservados . Un
error pone en uno la bandera de acarreo y regresa a un código de estado en el AH;
restablece la unidad y reintenta la operación.
INT 13H, función 04H: Verificar sectores
Esta operación sólo verifica que los sectores especificados puedan ser leídos y realiza
una verificación de redundancia cíclica (CRC). Cuando una operación escribe a un
sector, el controlador del disco calcula y escribe una suma de verificación CRC
inmediatamente después del sector, con base en los bits que están en uno. La función
04H lee el sector, recalcula la suma de verificación y la compara con el valor
almacenado. Observe que la verificación consiste en recalcular la suma de verificación
en lugar de verificar que los valores de byte en el sector coincidan con los datos de
salida en memoria. Puede utilizar esta función después de escribir (función 03H) para
asegurar mayor confianza en la salida, aunque a un costo de mal tiempo de E/S.
Cargue los registros igual que para la función 02H, pero ya que la operación no realiza
una verificación real de los datos, no existe necesidad de establecer la dirección en el
ES:BX.
Al regresar de carga, la bandera de acarreo se pone en cero y el AL contiene el número
de sectores realmente verificados. El contenido de los registros BS, BX, CX y DX se
preservan. Un error pone en uno la bandera de acarreo y regresa un código de estado en
el AH; restablece la unidad reintenta la operación.
INT 13H, función 05H: Formatea pistas
Las operaciones de lectura/escritura necesitan información sobre el formateo y
procesan un sector requerido. Esta operación formatea pistas de acuerdo con uno de
cuatro tamaños diferentes. Antes de la ejecución de la operación, utilice la función 17H
para establecer el tipo de disco flexible y la función 18H para establecer el tipo de
medio. Para formateo discos flexibles inicialice estos registros:
AL Número de sectores a formatear
CH Número de pista (los números inician con cero)
DH Número de cabeza (lado) (0 o 1 para disco flexible )
DL Número de unidad para disco flexible (0 = A ) o para disco duro (80H o
mayor)
ES:BXDirección segmento: desplazamiento que apunta a grupo de campos de
dirección para un pista.
Para cada sector del disco flexible en una pista, debe estar una entrada de
4 bytes de la forma T/H/S/B, donde
Byte 0 T= numero de pista (cilindro)
1H=numero de cabeza (superficie)
2S = numero de sector
3B= bytes con sector(00H=128,01H=256,02H=512H,03H=1024)
INT 13H, función 08H:Obtener parámetros de la unidad
Esta útil función regresa la información acerca de la unidad de disco. Carga el numero
de unidad en el DL(0=A,1=B, para disco flexible y 80H o mayor para disco duro). Una
operación exitosa regresa a lo siguiente:
BL Tipo de disco flexible(01H=360K, 02H=1.2M, 03H=720K, 04H=1.44M)
CH Numero superior de cilindro /pista
CL Bits 0-5=numero superior de sector
Bits 6-7= Dos bits de orden alto del numero de cilindro
DH Número superior de cabeza
DL Número de unidades conectadas al controlador
ES:DI Para discos flexibles, segmento: desplazamiento de una tabla de 11 bytes de
parámetros de unidad de disco flexible
INT 13H, función 09H: Inicializar la unidad
El BIOS realiza esta función cuando arranca su computador, de acuerdo con una tabla
de disco duro en BIOS. El DL contiene el numero de unidades( 80H o mayor). La
operación pone en uno o cero la bandera de acarreo y regresa el estado en el AH. Las
INT 41H e INT 46H del BIOS son operaciones relacionadas.
INT 13H, función 0AH: leer bufer ampliado del sector
El Bufer del sector en discos duros incluye los 512 bytes de datos mas 4 bytes para un
código de corrección de error (ECC) utilizado para verificación de error y corrección de
información. Esta función puede leer todo el Bufer del sector al igual que solo una parte
de la información. Para leer un bufer ampliado, cargue estos registros:
AL Número de sectores(hasta el máximo para la unidad)
BX Segmento: desplazamiento del bufer de entrada (como ES:BX)
CH Número de cilindro/pista
CL Bits 0-5= numero superior de sector
Bits 6-7= Dos bits de orden alto del numero del cilindro
DH Número de cabeza (lado)
DL Número de unidad(80H o mayor)
Una operación exitosa regresa al AL el numero de sectores transferidos. La operación
pone en uno o cero la bandera de acarreo y regresa un código de estado en el AH.
INT 13H, función 0BH: Escribe Bufer ampliado del sector
Esta función es similar a la función 0AH, excepto que, en lugar de leer el bufer del
sector, lo escribe (incluyendo el código ECC ) en el disco.
INT 13H, función 0CH: buscar cilindro
Esta función coloca la cabeza de lectura/escritura de un disco duro en un cilindro
especifico(Pista), pero no transfiere información. Para buscar un cilindro, cargue estos
registros:
CH Número de cilindro/pista
CL Bits 0-5= numero de sector
Bits 6-7= Dos bits de orden alto del numero del cilindro
DH Número de cabeza (lado)
DL Unidad(80H o mayor)
La operación pone en uno o cero la bandera de acarreo y regresa un código de estado en
el AH.
INT 13H, función 0CH: Restauración alterna de disco
Esta operación es similar a la función 00H , excepto que esta registrada a discos duros.
Cargue la unidad (80H o mayor) en el DL. El brazo de acceso de lectura / escritura se
posiciona en el cilindro 0. La operación pone en uno o cero la bandera de acarreo y
regresa un código de estado en el AH.
INT 13H, función 0EH: Leer Bufer del sector
Esta operación es similar a la función 0AH, salvo que lee parte de los 512 bytes del
sector y no los bytes del ECC.
INT 13H, función 0FH: Escribir Bufar del sector
Esta operación similar a la función 0BH, salvo que escribe parte de los 512 bytes del
sector ECC.
INT 13H, función 10H: Probar si esta preparada la unidad; 11H:
Recalificar la unidad de disco duro; 12H:diagnostico de ROM;
13H:diagnostico de la unidad, y 14H: diagnostico del controlador
Estas funciones realizan un diagnostico interno y reportan información especifica para
el BIOS y para programas avanzados de utilerías. Estas operaciones ponen en uno o
cero la bandera de acarreo y regresan en código de estado en el Ah.
INT 13H, función 15H: Obtiene el tipo de disco
Esta función regresa a la información acerca de la unidad de disco. Cargue el DL con la
unidad. Una operación valida regresa uno de los códigos siguientes en el AH.
00H no esta presente unidad/disco
01H unidad de disco flexible no es sensible a cambio de disco
02H unidad de disco flexible es sensible a cambio de disco
03H unidad de disco duro
Por el código de regreso 03 en el AH, la pareja CX:DX contiene el numero total de
sectores de disco en la unidad. La operación pone en uno o cero la bandera de acarreo y
regresa un código de estado en el AH.
INT 13H, función 16H: Cambia el estado de disco flexible
Esta función verifica si hay un cambio de disco flexible para sistemas que pueden ser
sensibles cambios. Cargue el DL con el numero de unidad (A=0,etc). La operación
regresa uno de los códigos siguientes en el AH:
00H no se cambia de disco flexible (bandera de acarreo = 0)
01H Parámetro no valido de disco flexible(bandera de acarreo = 1)
06H Disco flexible cambiado(bandera de acarreo = 1)
80H Unidad de disco flexible no esta preparada (bandera de acarreo = 1)
Los códigos de estado 01H y 80H son errores que ponen en uno la bandera de acarreo,
mientras que el 06H es un estado valido que también pone en no la bandera de acarreo.
Esta es una fuente potencial de confusión.
INT 13H, función 17H: Establezca el punto de medio
Esta operación configura la combinación de unidad y disco duro flexible. Utilice la
función 17H junto con la función 05H para formateo de disco. Cargue el numero de
unidad (0=A, etc.) en el DL y el tipo de disco flexible en el AL. Los tipos de disco
flexible son:
01H Disco flexible de 360K en unidades de 360K
02H Disco flexible de 360K en unidad de 1.2M
03H Disco flexible de 1.2M en unidad de 1.2M
04H Disco flexible de 720K en unidad de 720k
La operación pone en uno o cero la bandera de acarreo y regresa un código de estado en
el AH.
INT 13H, función 18H: Establece tipo de medio para formatear
Utilice esta operación inmediatamente antes de ejecutar la función 05H. Para establecer
el tipo de medio, cargue estos registros:
CH Número de pistas(los 8bits de orden bajo)
CL Número de pistas (dos bits de orden alto 7-6 ), Sectores por pista (bits 5-0 )
DL Unidad (0=A,etc)
Una operación valida regresa en el ES:DI un apuntador a una tabla, de 11 bytes, de
parámetros de disco flexible. La operación pone en uno o cero la bandera de acarreo y
regresa un código de estado en el AH
INT 13H, función 19H: Estacionar las cabezas del disco
Esta operación necesita el número de la unidad en el DL( 80H y mayor para disco duro).
La operación pone en uno o cero la bandera de acarreo y regresa un código de estado en
el AH.
INT 14H: Las comunicaciones de Entrada/Salida. Proporciona una fila de bytes de
E/S (esto es, un bit a la vez) al puerto de comunicación RS232. El DX debe contener el
número del adaptador RS232( 0-3 para COM1, 2,3 Y 4 respectivamente). Varias
funciones son establecidas por medio del registro AH.
FUNCION 00H:Inicializacion del puerto de comunicaciones. Establece los
parámetros siguientes en el AL de acuerdo con el numero de bit:
Vel. En baudios paridad bit de paridad longitud de palabra
7-5 4 - 3 2 1 – 0
000=110 00= ninguna 0 = 1 10 = 7
001=150 01= impar 1 = 2 11=8
010=300 10= ninguna
011=600 11=par
100=1,200
101=2,400
110=4,800
111=9,600
En el AX la operación regresa el estado del puerto de comunicaciones.(Véase la función
03H para detalles.)
Función 01h: Carácter de transmisión. Cargue el AL con el carácter que la
rutina transmite y el DX con el número de puerto. Al regreso, la operación coloca en el
AH el estado del puerto. (véase la función 03H.) Si la operación es habilitada para
transmitir el byte, también establece el bit 7 del AH, aunque el propósito normal de este
bit es reportar un error de tiempo terminado. Asegúrese de ejecutar la función 00H antes
de utilizar este servicio.
Función 02H: Carácter recibido. Cargue el número de puerto en el DX. La
operación acepta un carácter desde la línea de comunicaciones y lo envía al AL.
también establece el AH con el estado del puerto (véase la función 03H para bits de
error 7, 4, 3, 2 y 1. Por lo tanto un número diferente de cero en el AX indica un error de
entrada. Asegúrese de ejecutar la función 00H antes de utilizar este servicio.
Función 03H: Regresa estado del puerto de comunicaciones. Cargue el
número del puerto en el DX. La operación regresa el estado de la línea en el AH y el
estado del módem en el AL:
Otras funciones de la INT 14H son 04H (inicialización extendida) y 05H
(control de puerto ampliado de comunicación).
INT 15H: Servicios del sistema. Esta muy elaborada operación proporciona un gran
número de funciones en el AH, como las siguientes:
21H Autoprueba de encendido
43H Lee el estado del sistema
84H Da soporte la palanca de juegos
88H Determina el tamaño de la memoria extendida
89H Conmuta el procesador al modo protegido
C2H Interfaz del ratón
Por ejemplo, con la función 88H en el AH, la operación regresa en el AX el número de
kilobytes de memoria extendida. (Por ejemplo, 0580H significa 1408K bytes.) Como la
operación sale restablecer las interrupciones, úsela así:
MOV AH, 88H ; Petición de memoria extendida
INT 15H ; desde el BIOS
AH(ESTADO DE LA LíNEA) AL (ESTADO DEL MÓDEM)
7 Fuera de tiempo 7 Línea recibida señal detectada
6 Transmitir regsitro de corriente vacío 6 Indicadores
5 Transmitir registro válido vacío 5 Conjunto de datos listo
4 Detección de ruptura 4 Limpiara para enviar
3 Error de enmarcado 3 Delta recibe línea de señal de deteción
2 Error de paridad 2 Detector anillo del borde posterior
1 Error de sobrecorrida 1 Conjunto de datos Delta listo
0 Dato listo 0 Limpiar Delta para enviar
STI ; Restablece las interrupciones
INT 16H: Entrada desde el teclado. Acepta varias funciones en el AH para entrada
básica desde el teclado. La operación básica del teclado del BIOS utilizada de manera
extensiva por desarrolladores de software, proporciona los servicios siguientes de
acuerdo con la función que esté en el AH.
FUNCIONES DE LA INT 16H DEL BIOS
00H Lee un carácter
01H Determina si un carácter está presente
02H Regresa el estado actual del shift
05H Escribe en el teclado
10H Lee un carácter desde el teclado
11H Determina si un carácter esta presente
12H Regresa el estado actual del shift del teclado
Función 00H de la INT 16H: Lee un carácter
Esta operación maneja las teclas del teclado de 83 teclas, pero no acepta entrada
de las teclas adicionales en el teclado ampliado de 101 teclas. (Para una entrada que
pueda utilizar todo el teclado, vea la función 10H.
La operación verifica el bufer del teclado por entrada de un carácter. si ninguno está
presente, la operación espera a que el usuario presione una tecla. Si un carácter está
presente, la operación lo regresa en el AL y su código de rastreo en el AH. Si la tecla
presionada es una función extendida, como Inicio 0 F1, el carácter en el AL es 00H.
Aquí están las dos posibilidades:
El siguiente código examina el AL contra 00H para determinar si el usuario ha
presionado una tecla se función extendida:
AH
Código de rastreo
Código de rastreo
AL
Carácter ASCII
00H
Tecla presionda
Carácter ASCII normal
Tecla de función extendida
MOV AH, 00H ; Petición al BIOS de entrada desde el teclado
INT 16H ; Llama al BIOS
CMP AL, 00H ; Es una tecla de función extendida?
JE G40 ; sí
Como la operación no repite el carácter en la pantalla, tiene que emitir una interrupción
de despliegue en pantalla para ese propósito.
Función 01H de la INT 16H: Determina si un carácter está presente
Esta operación es semejante a la función 00H, pero con una diferencia
importante. Si un carácter ingresado está presente en el bufer del teclado, la operación
pone en cero la bandera del cero (ZF = 0) y envía el carácter al AL y su código de
rastreo al AH; el carácter ingresado permanece en el bufer. Si no esta presente algún
carácter, la operación pone en uno la bandera del cero y no espera. Observe que la
operación proporciona una característica de anticipación, ya que el carácter permanece
en el bufer del teclado hasta que la función 00h lo lee.
Función 02H de la INT 16H: Regresa el estado actual de las teclas shift
Esta operación regresa a AL el estado de la tela shift del teclado desde el área de
datos del BIOS en la localidad 417H (40:17H). El código siguiente examina si la tecla
shift izquierda (bit 1) o derecha (bit 0) están presionadas:
MOV AH, 02H ; Petición de estado del shift
INT 16H ; Llama al BIOS
OR AL, 00000011B ; Se presionó el shift izq. o der.?
JE xxx ; -sí
Véase la función 11H para manejo del estado del shift en la localidad 418H para
funciones extendidas en el teclado ampliado.
Función 05H de la INT 16H: Escritura en el teclado
Esta operación permite que su programa inserte caracteres en el bufer del teclado como
si el usuario hubiera presionado alguna tecla. Cargue el carácter ASCII al CH y su
código de rastreo al CL. La operación le permitirá ingresar caracteres en el bufer hasta
que este lleno.
Función 10H de la INT 16H: Lectura de un carácter del teclado
La operación es la misma que la de la función 00H, salvo que también acepta las
teclas adicionales de función extendidas (como F11 y F12) desde el teclado ampliado,
mientras que la función 00H no lo permite.
La operación verifica el bufer del teclado para un carácter ingresado. Si ninguno está
presente, la operación espera a que el usuario presione una tecla. Si un carácter está
presente, la operación lo regresa en el AL y su código de rastreo en el AH. Si la tecla
presionada es una tecla de la función extendida, como Inicio o F1, el carácter en el AL
es 00H. En el teclado ampliado, F11 y F12 también regresan 00H en el AL, pero otras
teclas de control (duplicados), como Inicio y RePág, regresan E0H. Aquí están las dos
posibilidades:
Puede examinar el AL contra 00H o E0H para determinar si el usuario ha presionado
una tecla de función extendida:
MOV AH, 10H ; Petición al BIOS para una entrada del teclado
INT 16H ; Llama al BIOS
CMP AL, 00H ; Es una tecla de función extendida?
JE G40 ; -sí
CMP AL, 0E0H ; Es una tecla de función extendida?
JE G40 ; - sí
Ya que la operación no permite el carácter en la pantalla, debe emitir una interrupción
de despliegue en pantalla para ese propósito.
Función 11H de la INT 16H: Determina si está presente un carácter
Esta operación es la misma que la función 01H, excepto que no reconoce las funciones
extendidas del teclado ampliado, mientras que 01H no lo hace.
Tecla presionada
Carácter ASCII normal:
Tecla de función extendida:
AH
Código de rastreo
Código de rarstreo
AL
Carácter ASCII
00H o E0H
Función 12H de la INT 16H: Regresa el estado presente sel shift del teclado
Esta operación es semejante a la función 02H, que regresas al AL el estado del shift del
teclado desde el área de datos del BIOS en la localidad 417H (40:17H). La operación
también envía el estado del shift extendido a AL:
INT 17H: Salida a la impresora. Proporciona varias funciones para la
impresión vía el BIOS. Los puertos de impresión válidos para la INT 17H son 0 (por
omisión), 1 y 2, para LPT1, LPT2 y LPT3, respectivamente. La INT 17H proporciona
tres funciones diferentes, como se especifica en el registro AH.
1 Primero emita la función 02H para determinar el estado de la impresora, vía un
número de puerto seleccionado. Incluya esta prueba de estado antes de cada
intento de imprimir. Si la impresora está disponible. entonces:
2 Emita la función 01H para Inicializar el puerto de impresión, y:
3 Emita las operaciones de la función 00H para enviar caracteres a la impresora.
Las operaciones regresan el estado de la impresora al AH, con uno o más bits
puestos en 1:
BIT CAUSA
0 Se acabó el tiempo
3 Error de entrada/salida
4 Seleccionada
5 No hay papel
6 Reconocimiento desde la impresora
7 No está ocupada
Si la impresora ya está encendida y preparada, la operación regresa 90H (10010000
Bit Acción Bit Acción
7 SysReq presionada 3 Alt derecha presionda
6 BloqMayús presionada 2 Ctrl derecha presionda
5 BloqNum presionda 1 Alt izquierda presionada
4 ScrollLock presionda 0 Crtl izquierda presionda
binario): la impresora no está ocupada, pero está seleccionada, una condición válida.
Errores en la impresora son el bit 5 (no hay papel) y el bit 3 (error de salida). Si la
impresora no está encendida, la operación regresa B0H, o 10110000 binario, indicando
“No hay papel”.
INT 17H, función 00H : Imprimir un carácter
Esta operación hace que se imprima un carácter y permite impresoras en los puertos 0, 1
o 2.
Cargue el carácter en el AL y el número del puerto de la impresora en el DX:
MOV AH, 00H ; Petición para imprimir
MOV AL, char ; Carácter que se va a imprimir
MOV DX, 00 ; Seleccionada el puerto 0 para la impresora
INT 17H ; Llama al BIOS
La operación regresa el estado al registro AH. La práctica recomendada es utilizar
primero la función 02H para examinar el estado de la impresora.
INT 17H, función 01H : Inicializa el puerto de la impresora
Esta operación selecciona un puerto, restablece la impresora y la inicializa para datos:
MOV AH, 01H ; Petición para inicializar el puerto
MOV DX, 00 ; Selecciona el puerto 0 para la impresora
INT 17H ; Llama al BIOS
Ya que la operación envía un carácter de Avance de página, puede usarla para fijar la
impresora en la posición superior de la página, aunque algunas impresoras lo hacen de
manera automática cuando se encienden. La operación regresa un código de estado en el
AH.
INT 17H, función 02H : Obtiene el estado de la impresora
El objetivo de esta operación es determinar el estado de la impresora:
MOV AH, 02H ; Petición para leer el puerto
MOV DX, 00 ; Selecciona el puerto 0 para la impresora
INT 17H ; Llama al BIOS
TEST AH, 00101001B ; Está preparada?
JNZ errormsg ; no, mostrar mensaje
La operación regresa el mismo estado del puerto de impresión que la función
01H. Cuando el programa corre, si la impresora inicialmente está encendida el BIOS
está habilitado para regresar un mensaje de manera automática (su programa se supone
que prueba y actúa de acuerdo con el estado de la impresora). Si su programa no
examina el estado, su única indicación es el cursor intermitente, Si enciende la
impresora en este punto, parte de la información de salida se pierde. En consecuencia,
antes de ejecutar cualquiera de las operaciones de impresión del BIOS, verifique el
estado del puerto; si hay un error, muestra un mensaje. (Las operaciones del DOS
realizan de manera automática esta verificación, aunque su mensaje “No hay papel” se
aplica a varias condiciones.) Cuando la impresora es encendida, el mensaje ya no
aparece e inicia la impresión de forma normal sin pérdida de información.
En cualquier momento, una impresora puede quedarse sin papel o ser apagada
sin advertirlo. Si esta escribiendo programas para que los usen otros, incluya una prueba
del estado antes de cada intento de imprimir.
PUNTOS CLAVE
• Después de que la impresión esté terminada, utilice los comandos Avance de
línea o Avance de página para limpiar el bufer de impresión.
• La función 40H del DOS (la selección preferida) imprime cadenas de caracteres,
mientras que la función 05H del DOS y 17H de BIOS imprimen un solo carácter
a la vez.
• El DOS proporciona un mensaje si existe algún error en la impresora; el BIOS
sólo regresa un código de estado. Cuando utiliza la INT 17H del BIOS, verifique
el estado de la impresora antes de imprimir.
INT 18H: Entrada al BASIC de ROM. Llamada al BIOSA si el sistema
inicia sin disco que contenga los programas de sistema del DSO.
INT 19H: Cargador de arranque. Si un dispositivo de disco (o de disco
flexible) está disponible con los programas de sistema del DOS, lee la pista 0, sector 1,
en la localidad de arranque en 7C00H y transfiere el control a esta localidad. Si no
existe unidad de disco, transfiere la entrada al BASIC de ROM por medio de la INT
18H. Es posible usar esta operación como una interrupción de software; no limpia la
pantalla o inicializa datos en el BIOS de ROM.
INT 1AH: Lee y pone la hora. Lee o pone la hora del día de acuerdo con el
código de la función en el AH:
• 00H = Lee el reloj del sistema. Regresa la parte alta del contador en el CX y la
parte baja en el DX. Si la hora pasó las 24 horas desde la última lectura, la
operación coloca en el AL un valor diferente de acero.
• 01H = Pone la hora del reloj del sistema. Carga la parte alta del contador en el
CX y la parte baja en el DX.
• 02H-07H. Esta función maneja la hora y fecha para los servicios del reloj de
tiempo real.
Para determinar cuánto se tarda en ejecutar una rutina, podría poner en cero el
reloj y después leerlo al terminar el procesamiento.
INT 1BH: Tomar control en una interrupción de teclado. Cuando son
presionadas la teclas Ctrl+Break se provoca que el BIOS en ROM transfiera el control a
su dirección de interrupción, en donde la bandera esté en uno.
INTERRUPCIONES DEL DOS
Las interrupciones desde la 20H hasta la 3FH están reservadas para operaciones del
DOS, como se describe en las secciones siguientes.
INT 20H: Termina programa. Finaliza la ejecución de un programa .COM,
restaura las direcciones para Ctrl+Break y errores críticos, limpia los bufer de registros
y regresa el control al DOS. Esta función por lo regular sería colocada en el
procedimiento principal y al salir de él. CS contendría la dirección del PSP. La
terminación preferida es por medio de la función 4CH de la INT 21H.
INT 21H: Petición de función al DOS. La principal operación d4el DOS
necesita una función en el AH y se describe con detalle más adelante.
INT 22H: Dirección de terminación. Copia la dirección de esta interrupción
en el PSP del programa (en el desplazamiento OAH) cuando el DOS carga un programa
para ejecución. A la terminación del programa, el DOS transfiere el control a la
dirección de la interrupción. Sus programas no deben emitir esta interrupción.
INT 23H: Dirección del Ctrl+Break. Diseñada para transferir el control a
una rutina del DOS (por medio del PSP desplazamiento OEH) cuando usted presiona
Ctrl+Break o Ctrl+C. La rutina finaliza la ejecución de un programa o de un archivo de
procesamiento por lotes. Un programa también puede cambiar esta dirección para que
su propia rutina realice una acción especial sin terminar el programa. Sus programas no
deben emitir esta interrupción.
INT 24H: Manejador de error crítico. Usada por el DOS para transferir el
control (por medio del PSP desplazamiento 12H) cuando reconoce un error crítico (a
veces en una operación de disco o de la impresora). Sus programas no deben emitir esta
interrupción.
INT 25H: Lectura absoluta de disco. Lee el contenido de uno o más
sectores de disco; pero es sustituida por la función 440DH código secundario 61H, de
la INT 21H.
INT 26H: Escritura absoluta de disco. Escribe información desde la
memoria a uno o más sectores de disco; es sustituida por la función 440DH, código
secundario 41H de la INT 21H.
E/S ABSOLUTA DE DISCO
Puede utilizar la INT 25H y la 26H del DOS para lecturas y escrituras absolutas para
procesar un disco de manera directa, por ejemplo, para recuperar un archivo dañado. En
este caso, no define manejadores de archivo o FCB y pierde las ventajas de manejo de
directorio y bloqueo y desbloqueo de registros que tiene con la INT 21H del DOS.
Observe que la función 44H de la INT 21H proporciona un servicio similar y, de
acuerdo con las revistas de Microsoft, ha sustituido a las INT 25H y 26H.
Como estas operaciones tratan de leer todos los registros como si fueran el
tamaño de un sector, accesa de manera directa a un sector completo o un bloque de
sectores. El direccionamiento de disco es en términos de número relativo de registro
(sector relativo). Para determinar un número relativo de registro en discos flexibles de
doble lado con nueve sectores por pista, cuente cada sector desde la pista 0, sector 1,
como sigue:
PISTA SECTOR NUMERO RELATIVO DE REGISTRO
0 1 0 (el primer sector en el disco)
0 2 1
1 1 9
1 9 17
2 9 26
Una fórmula conveniente para determinar un número relativo de registro en
discos flexibles con nueve sectores es
Número relativo de sector = (pista 9) + (sector -1)
Por tanto, el número relativo de registro para la pista 2, sector 9 es
(2 x 9) +(9 - 1) = 18 + 8 = 26
A continuación está el código necesario para peticiones de disco de menos de 32
MB
MOV AL, #unidad ; 0 para A, 1 para B, etc.
MOV BX, direcc ; Transfiere dirección
MOV CX, sector ; Número de sectores para leer /escribir
MOV DX, #sector ; Inicio número relativo de sector
INT 25H o 26H ; DOS, lectura o escritura absoluta
POPF ; Saca las banderas
JC error
Las operaciones absolutas de lectura / escritura en disco destruyen todos los
registros excepto los registros de segmento y emplean la bandera de acarreo para indicar
una operación exitosa (0) o no exitosa (1). Una operación no exitosa regresa uno de los
siguientes códigos diferentes de cero en el AL:
10000000 Conexión falló al responder
01000000 Operación de búsqueda falló
00001000 Incorrecta lectura de CRC en disco flexible
00000100 Sector solicitado no encontrado
00000011 Intento de escribir en un disco protegido contra escritura
00000010 Otro error
La operación INT empuja las banderas en la pila. Puesto que las banderas
originales aún están en la pila antes de regresar de la operación, debe sacarlas después
de examinar la bandera de acarreo.
Desde la versión DOS 4.0 puede usar las INT 25H y 26H para accesar
particiones de disco que excedan 32MB. El AL y el CX todavía son usadas de la misma
manera. El DX no es utilizado, y el BX apunta a un bloque de parámetros de 10 bytes
descrito como sigue:
BYTES DESCRIPCION
00H-03H Número de sector de 32 bits
04H-05H Número de sectores de lectura/escritura
06H-07H Desplazamiento del bufer
08H-09H Segmento del bufer
Las INT 25H y 26H del DOS proporcionan operaciones absolutas de lectura y escritura
en disco, pero no proveen de manejo automático del directorio, operaciones de fin de
archivo o bloqueo y desbloqueo de registros.
INT 27H: Termina pero permanece residente ( residente en memoria).
Hace que un programa .COM al salir permanezca residente en memoria; sustituida por
la función 31H de la INT 21H.
INT 2FH: Interrupción de multiplexión. Implica la comunicación entre
programas, como a comunicación del estado de un spooler de la impresora, la presencia
de un controlador de dispositivo o un comando del DOS tal como ASSIGN o APPEND.
A continuación se describe la función 4A01H, que verifica si hay espacio disponible en
el área alta de memoria.
INT 33H: Manejador del ratón. Proporciona servicios para el manejo del
ratón.
CARACTERISTICAS DEL RATON
El ratón es un dispositivo común para apuntar, básicamente gobernado por un
controlador que en general es instalado por una entrada en el archivo CONFIG.SYS o
AUTOEXEC.BAT. El controlador debe ser instalado por un programa para responder a
las acciones del ratón.
Todas las operaciones del ratón dentro de un programa son realizados por
funciones estándar de la INT 33H de la forma.
MOV AX, función ; Petición para el ratón
... ; Parámetros (si hay)
INT 33H ; Llama al controlador del ratón
Observe que a diferencia de las operaciones que utilizan el registro AH, las funciones de
la INT 33H son cargadas en el registro AX completo.
La primer instrucción del ratón que un programa emite es la función 00H, la
cual simplemente inicializa el controlador del ratón para el programa. Habitualmente,
usted necesita emitir este comando una sola vez, al inicio del programa. La instrucción
que sigue a la función 00H debe ser la función 01H, que hace que el apuntador del
ratón aparezca en la pantalla. Después de eso, tiene opción de una amplia gama de
operaciones con el ratón.
Algunas definiciones básicas con el ratón
• Mickey: Una unidad medida del movimiento del ratón, aproximadamente 1/200
de una pulgada.
• Conteo de mickey: Número de mickey que el ratón rueda horizontal o
verticalmente. El conteo de mickey es utilizado por el controlador del ratón para
mover el apuntador en la pantalla un cierto número de pixeles.
• Apuntador del ratón: En modo texto, el apuntador es un cuadro intermitente, en
video inverso; en modo gráfico, el apuntador es una punta de flecha.
• Pixel: El elemento de la pantalla mas pequeño que se puede direccionar. Por
ejemplo, para modo texto 03H hay ocho pixeles por byte.
• Umbral de velocidad: La velocidad en mickey por segundo que el ratón debe
moverse para duplicar la velocidad del apuntador en la pantalla. Por omisión es
de 64 mickey por segundo.
FUNCIONES DEL RATÓN
Las siguientes son las funciones disponibles del ratón para la INT 33H ; por lo
común, relativamente pocas de ellas son usadas:
00H Inicializa el ratón
01H Muestra el apuntador del ratón
02H Oculta el apuntador del ratón
03H Obtiene el estado del botón y la posición del apuntador
04H Establece posición del apuntador
05H Obtiene información del botón presionado del ratón
06H Obtiene información acerca de la liberación del botón
07H Fija límites horizontales para el apuntador
08H Fija límites verticales para el apuntador
09H Establece el tipo de apuntador gráfico
0AH Establece el tipo de apuntador en texto
0BH Lee los contadores de movimiento del ratón
0CH Instala el manejador de interrupciones par eventos del ratón
0DH Activa la emulación de una pluma óptica
0EH Desactiva la emulación de una pluma óptica
0FH Establece la relación mickey a pixel
10H Establece área de exclusión del apuntador
13H Establece el umbral de velocidad doble
14H Intercambia interrupción de evento de ratón
15H Obtiene tamaño del bufer para estado del controlador dl ratón
17H Restaura el estado del controlador del ratón
18H Instala manejador alterno para eventos del ratón
19H Obtiene dirección del manejador alterno
1AH Fija la sensibilidad del ratón
1BH Obtiene la sensibilidad del ratón
1CH Establece la velocidad de interrupción de ratón
1DH Selecciona página de despliegue para el apuntador
1EH Obtiene página de despliegue para el apuntador
1FH Deshabilita el controlador del ratón
20H Habilita el controlador del ratón
21H Restablece el controlador del ratón
22H Establece lenguaje para mensajes de controlador del ratón
23H Obtiene el número del lenguaje
24H Obtiene información del ratón
SERVICIO DE LA INT 21H DEL DOS.
A continuación están las funciones del DOS solicitadas por la INT 212H, que
requieren de una función codificada en el registro AH:
00H Termina programa. Básicamente la misma que la INT 20H y también
reemplazada por la función 4CH de la INT 21H.
01H Entrada desde el teclado con repetición en la pantalla.
Función 01H, de la INT 21H: Entrada del teclado con eco (repetición en
pantalla)
Esta operación acepta un carácter desde el bufer del teclado o, si no está presente
ninguno, espera una entrada del teclado. La operación regresa uno de dos
códih=gos de estado:
• AL = un número distinto de cero significa que un carácter ASCII estándar está
presente, como una letra o un número, que la operación repite en la pantalla.
• AL = cero significa que el usuario ha presionado una tecla de función extendida,
como Inicio, F1 o RePág, y el AH aún tiene la función original. La operación
maneja las funciones ampliadas de manera ineficiente, intentando enviarlas a la
pantalla. Y para obtener el código de rastreo para la tecla de función en el AL,
tiene que repetir de manera inmediata la operación INT 21H. LA operación
también responde a una petición Ctrl + Break.
El código siguiente ilustra esta función:
MOV AH, 01H ;Petición de entrada del teclado
INT 21H ; Llama al DOS
` CMP AL, 00 ; Se presionó una tecla de función?
JNZ ... ; no, entonces es un carácter ASCII
INT 21H ; sí, entonces repite la operación
.. ; para el código de rastreo
02H Despliega un carácter .
Función 02H del DOS para despliegue en la pantalla
Puede encontrar que la función 02H de la INT 21H , sea útil para despliegue de
un solo carácter. Cargue en el DL el carácter que será desplegado en la posición actual
del cursor, y solicite la INT 21H. Los caracteres de Tabulador, Retorno de carro y
Avance de línea actúan normalmente, y la operación avanza de manera automática el
cursor. El código en lenguaje ensambladores:
MOV AH, 02H ; Petición de desplegar u carácter
MOV DL, char ; Carácter desplegado
INT 21H ; Llama al DOS
El ejemplo siguiente muestra cómo utilizar este servicio para desplegar una
cadena de caracteres. La cadena para desplegar está definida en CONAME. El programa
carga la dirección de CONAME en el registro DI y su longitud en el CX. El ciclo
implica el incremento de DI (en INC) para cada carácter sucesivo y la disminución
del CX (en LOOP) para el número de caracteres desplegados . El código es como sigue:
CONAME DB ‘Software Services’, 13 , 10
...
MOV AH, 02H ; Petición para desplegar un carácter
MOV CX, 19 ; Longitud de la cadena de caracteres
LEA DI, CONAME; Dirección de la cadena de caracteres
A30: MOV DL, [DI] ; Carácter que despliega
INT 21H ; Llama al DOS
INC DI ; Incrementa para el siguiente carácter
LOPP A30 ; Si aún no termina repite el ciclo
... ; Terminación
03H Entrada de comunicación. Lee un carácter desde el puerto serial y lo
envía al AL. Este es un servicio primitivo, y es preferida la INT 14H del BIOS.
04H Salida de comunicación. El DL contiene el carácter a transmitir. Es
preferida la INT 14H del BIOS.
05H Salida de la impresora.
DOS 21H, Función 05H: Imprimir un carácter
La función original del DOS proporciona facilidades para imprimir. Cargue la
función 05H en el registro AH, el carácter que quiere imprimir en el DL y emita la INT
21H como sigue:
MOV AH, 05H ; Petición para imprimir un carácter
MOV DL, char ; Carácter que se va a imprimir
INT 21H ; Llama al DOS
Estas instrucciones son adecuadas para enviar un solo carácter a la impresora. Sin
embargo, por lo regular, la impresión implica una línea de texto completa o parte de ella
y requiere pasar por una línea formateada en el área de datos.
El ejemplo siguiente ilustra la impresión de una línea completa. Primero
inicializa la dirección de HEADING en el registro SI y pone en CX la longitud de
HEADING. Después, el ciclo en P20 extrae cada carácter en HEADING es una página
nueva y es seguido por un espacio doble. El código es como sigue:
HEADING DB 0CH, ‘Industrial Bycicle Mfrs’, 0DH, 0AH, 0AH
...
MOV CX, 27 ; Inicializa la longitud y
LEA SI, HEADING ; la dirección del encabezado
P20:
MOV AH, 05H ; Petición para imprimir
MOV DL, [SI] ; un carácter del encabezado
INT 21H ; Llama al DOS
INC SI ; Siguiente carácter del encabezado
LOOP P20 ; Repetir 27 veces
Si la impresora no está encendida, el DOS regresa el mensaje “ No hay papel” de
forma repetida. Si enciende la impresora, el programa empieza a imprimir
correctamente. También puede utilizar Ctrl + Break para cancelar la ejecución de la
operación de imprimir.
06H Teclado y pantalla directos.
07H Teclado directo sin repetición en la pantalla .
08H Entrada desde el teclado sin repetición en la pantalla.
09H Despliega cadena de caracteres.
0AH Entrada a un bufer de teclado.
0BH Verificar estado del teclado.
0CH Limpiar el bufer del teclado y llamar a una entrada.
0DH Restablecer unidad de disco.
0EH Selecciona unidad de disco por omisión.
0FH Abre un FCB de un archivo.
10H Cierra un FCB de un archivo.
11H Busca la primer entrada que coincida en un disco. Es obsoleta y
reemplazada por la función 4EH.
12H Busca la siguiente entrada que coincida en un disco. Obsoleta y
reemplazada por la función 4FH .
13H Borra un FCB de un archivo. Obsoleta y reemplazada por la función
41H.
14H Lee un registro secuencial de un FCB.
15H Escribe un registro secuencial de un FCB.
16H Crea un FCB de un archivo. Obsoleto y reemplazado por la función
56H.
19H Determina la unidad de disco por omisión.
1AH Designa el área de transferencia de disco.
1BH Obtiene información de una unidad por omisión.
1CH Obtiene información de una unidad específica.
1FH Obtiene bloque de parámetros de la unidad por omisión.
21H Lee de forma directa un registro del FCB.
22H Escribe de forma directa un registro del FCB.
23H Obtiene el tamaño del FCB de un registro. Obsoleta y reemplazada
por la función 42H.
24H Establece el campo de registro directo de un FCB.
25H Establece la dirección de la tabla de interrupciones.
26H Crear un nuevo prefijo de segmento de programa. Reemplazada por
la función 4B00H.
27H Lee directamente un bloque de disco.
28H Escribe directamente un bloque de disco.
29H Análisis gramatical del nombre de un archivo.
AL = día de la semana (Domingo = 10)
CX = año (1980 - 2099)
DH = mes (01-12)
DL = día (01-31)
2BH Fecha del sistema. Establece los siguientes valores binarios:
CX = año (1980 - 2099)
DH = mes (01-12)
DL = día (01-31)
Al regresar, el AL indica válido (00H) o no válido (FFH).
2CH Obtiene la hora del sistema. Regresa estos valores binarios:
CH = horas, en formato de 24 horas (00-23, medianoche = 00)
CL = minutos (00-59)
DH = segundos(00-59)
DL = centésimas de segundo (00-99)
2DH Pone la hora del sistema. Establece los siguientes valores binarios:
CH = horas, en formato de 24 horas (00-23, medianoche = 00)
CL = minutos (00-59)
DH = segundos(00-59)
DL = centésimas de segundo (00-99)
2EH Establece / restablece la verificación de disco.
2FH Obtiene la dirección de la actual área de transferencia a disco (DTA).
30H Obtiene el número de la versión del DOS. Regresa estos valores:
AL = número principal de versión, como 7 para la versión 7.11
AH = número secundario de versión , como B hex (11) para la versión
7.11
BH = número de fabricante o bandera de la versión. Si la bandera de la
versión es 08H, el DOS se ejecuta en ROM.
BL:CX = cero o número de serie, en 24 bits, del usuario (dependiente del
fabricante).
31H Termina pero permanece residente.
32H Obtiene bloque de parámetros de la unidad (DPB).
3300H Obtiene estado de Ctrl+C. Si la bandera de Ctrl+C está apagada (0), el
DOS verifica por Ctrl+C sólo mientras maneja funciones de E/S caracteres,
01H - 0CH. Si la bandera está activada (1), el DOS también verifica mientras
maneja otras funciones. Para obtener el estado, ponga la subfunción 00H en el
AL. El valor regresado en el DL es 00H =verificación deshabitada o 01H =
verificación habilitada.
3305H Obtiene unidad de arranque (disponible desde DOS 5). La operación
regresa en el DL la unidad (1 = A, etc.) esada para cargar el DOS.
3306H Obtiene la versión del DOS (disponible desde DOS 5). La operación
regresa:
BL = número principal de versión, como 7 para la versión 7.11
BH = número secundario de versión, como B hex (11) para la versión
1.11
DL = número de revisión en los bits 2-0
DH = bandera de versión del DOS (indica si el DOSS está corriendo en
memoria convencional, en área de memoria alta, o en ROM)
Aunque el comando SETVER del DOS puede falsear el número de
versión del DOS, la función 3306H envía la versión verdadera.
34H Obtiene la dirección de la bandera de DOS acupado (inDOS).
35H Obtiene la dirección de la tabla de interrupción.
36H Obtiene el espacio libre en disco.
38H Obtiene / establece información dependiente el país. Dasoporte a
varias funciones concernientes a información específica de varios países,
como el símbolo y formato monetario del país,
separadores de milares y lugares decimales y separadores de fecha
y hora. Carga el DX para la operación:
DX = FFFFH: Establece el código del país que el DOS usa hasta que se
indique otra cosa.
DX = cualquier otro número: Obtiene el códig actual del país en uso.
39H Crea subdirectorio (MKDIR).
3AH Elimina subdirectorio (RMDIR).
3BH Cambia de directorio (CHDIR).
3CH Crea un archivo con manejador.
3DH Abre archivo con manejador.
3EH Cierra archivo con manejador.
3FH Lee archivo / dispositivo.
40H Escribe archivo / dispositivo con manejador.
41H Borra archivo desde el directorio.
42H Mueve el apuntador del archivo.
43H Examina / cambia el atributo del archivo.
44H Control de E/S para dispositivos. Da soporte a un extenso conjunto de
subfunciones para examinar dispositivos y leer y escribir datos, listadas
en las funciones siguientes:
4400H Obtiene información de dispositivo.
4401H Establece información de dispoditivo.
4404H Lee datos de control desde la unidad.
4405H Escribe datos de control a la unidad.
4406H Examina el estado de la entrada.
4407H Examina estado de la salida.
4408H Determina si el medio es remivible para el dispositivo.
440DH, Código secundario 41H escribe sector en disco.
440DH, Código secundario 61H lee sector en disco.
440DH, Código secundario 42H formatea pista.
440DH, Código secundario 46H establece identificación del medio.
440DH, Código secundario 60H obtiene parámetros del dispositivo.
440DH, Código secundario 66H obtiene identificación del medio.
440DH, Código secundario 68H sensible al tipo del medio.
45H Duplica un manejador de archivo.
46H Fuerza la duplicación de un manejador.
47H Obtiene directorio actual.
48H Asigna bloque de memoria.
49H Libera bloque de memoria asignado.
4AH Establece tamaño del bloque de memoria asignado.
4BH Carga / ejecuta un programa.
4CH Termina un program. Ésta es la forma estandar de terminar un
programa.
4DH Recupera el código de regreso de un subproceso.
4EH Encuentra primera entrada del directorio que coincida.
4FH Encuentra siguiente entrada del directorio que coincida.
50H Establece la dirección de un prefijo de segmento de programa (PSP).
Cargue el BX con el desplazamiento del PSP para el programa actual.
Ningún valor es regresado.
51H Obtiene la dirección de un prefijo de segmento de programa (PSP).
Regresa la dirección de desplazamiento del PSP para el programa actual.
52H Obtiene la dirección de la lista interna del DOS.
54H Obtiene estado de verificación.
56H Renombra un archivo.
57H Obtiene / pone la fecha y hora de un archivo.
5800H Obtiene la estrategia de asignación de memoria.
5801H Establece la estrategia de asignación de memoria.
5802H Obtiene enlace con la memoria superior.
5803H Establece enlace con la memoria superior.
59H Obtiene código de error extendido.
5AH Crea un archivo temporal.
5BH Crea u archivo nuevo.
5CH Bloquea / desbloquea el acceso a archivo. Usado en entornos de redes y
de multitaréas .
5DH Establece error extendido. Cargue el DX con la dirección de
desplazamiento de una tabla de información de errores. La tabla será
recuperada por la siguiente ejecución de la función 59H (obtener código
de error extendido).
5EH Servicios de redes de área local. Una sunfunción en el AL especifica el
servicio:
00H Obtiene el nombre de la máquina.
02H Establece configuración de la impresora.
03H Obtiene configuración de la impresora.
5FH Servicios de redes de area local. Una sunfunción en el AL especifica el
servicio:
02H Obtiene una entrada de la lista de asignación.
03H Crea la conexión con la red
04H Cancela la conexión con la red
62H Obtiene la dirección del PSP.
65H Obtiene información ampliada del país. Da soporte a varias
subfunciones concernientes a información específica de varios países.
66H Obtiene / establece página global de código.
67H Establece el número máximo de manejadores.
68H Archivo commit.
6CH Extensión de abrir archivo. Combina las funciones 3CH (crear
archivo), 3DH (abrir archivo) y 5BH (crear archivo único).
|