PROGRAMACION
Curso assembler 2 (manejo de interrupciones del BIOS)
Home
Descripción del PC
Curso de assembler 1 (sistema DOS)
Curso assembler 2 (manejo de interrupciones del BIOS)
Curso de perl
Manual de Linux
CYGWIN
Contact Us


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).


Enter supporting content here