|
Registros
de retorno: Ninguno
Esta función nos despliega el caracter cuyo codigo
hexagesimal corresponde al valor almacenado en el registro DL, no se modifica ningún
registro al utilizar este comando.
Es recomendado el uso de la función 40H de la misma
interrupción en lugar de esta función.
|
|
Uso:
Despliega una cadena de carateres en
la pantalla.
|
|
Registros
de llamada:
- AH = 09H
- DS:DX = Dirección de inicio de una cadena de caracteres
|
|
Registros
de retorno: Ninguno.
Esta función despliega los caracteres, uno a uno, desde
la dirección indicada en el registro DS:DX hasta encontrar un caracter $,
que es interpretado como el final de la cadena.
Se recomienda utilizar la función 40H en lugar de esta
función.
|
|
Uso:
Escribir a un dispositivo o a un
archivo.
|
|
Registros
de llamada:
- AH = 40H
- BX = Vía de comunicación
- CX = Cantidad de bytes a escribir
- DS:DX = Dirección del inicio de los datos a escribir
|
|
Registros
de retorno:
- CF = 0 si no hubo error
- AX = Número de bytes escritos
- CF = 1 si hubo error
- AX = Código de error
El uso de esta función para desplegar información en
pantalla se realiza dandole al registro BX el valor de 1 que es el valor preasignado al
video por el sistema operativo MS-DOS.
|
|
Uso:
Leer un caracter del teclado y
desplegarlo.
|
|
Registros
de llamada:
- AH = 01H
|
|
Registros
de retorno:
- AL = Caracter leído
Con esta función es muy sencillo leer un caracter del
teclado, el código hexadecimal del caracter leído se guarda en el registro AL. En caso
de que sea un caracter extendido el registro AL contendra el valor de 0 y será necesario
llamar de nuevo a la función para obtener el código de este caracter.
|
|
Uso:
Leer caracteres del teclado y
almacenarlos en un buffer.
|
|
Registros
de llamada:
- AH = 0AH
- DS:DX = Dirección del área de almacenamiento
- BYTE 0 = Cantidad de bytes en el área
- BYTE 1 = Cantidad de bytes leídos
- desde BYTE 2 hasta BYTE 0 + 2 = caracteres leídos
|
|
Registros
de retorno:
- Ninguno
Los caracteres son leídos y almacenados en un espacio
predefinido de memoria. La estructura de este espacio le indica que en el primer byte del
mismo se indican cuantos caracteres serán leídos. En el segundo byte se almacena el
número de caracteres que ya se leyeron, y del tercer byte en adelante se escriben los
caracteres leídos.
Cuando se han almacenado todos los caracteres indicados
menos uno la bocina suena y cualquier caracter adicional es ignorado. Para terminar la
captura de la cadena es necesario darle [ENTER].
|
|
Uso:
Leer información de un dispositivo
o archivo.
|
|
Registros
de llamada:
- AH = 3FH
- BX = Número asignado al dispositivo
- CX = Número de bytes a procesar
- DS:DX = Dirección del área de almacenamiento
|
|
Registros
de retorno:
- CF = 0 si no hay error y AX = número de bytes leidos.
- CF = 1 si hay error y AX contendra el código del error.
|
|
Uso:
Abrir archivo FCB
|
|
Registros
de llamada:
- AH = 0FH
- DS:DX = Apuntador a un FCB
|
|
Registros
de retorno:
- AL = 00H si no hubo problema, de lo contrario regresa
0FFH
|
|
Uso:
Leer secuencialmente un archivo FCB.
|
|
Registros
de llamada:
- AH = 14H
- DS:DX = Apuntador a un FCB ya abierto.
|
|
Registros
de retorno:
- AL = 0 si no hubo errores, de lo contrario se regresara
el código correspondiente de error: 1 error al final del archivo, 2 error en la
estructura del FCB y 3 error de lectura parcial.
Esta función lo que hace es que lee el siguiente bloque
de información a partir de la dirección dada por DS:DX, y actualiza este registro.
|
|
Uso:
Escribir secuencialmente a un
archivo FCB
|
|
Registros
de llamada:
- AH = 15H
- DS:DX = Apuntador a un FCB ya abierto
|
|
Registros
de retorno:
- AL = 00H si no hubo errores, de lo contrario contendra el
código del error: 1 disco lleno o archivo de solo lectura, 2 error en la formación o
especificación del FCB.
La función 15H después de escribir el registro al
bloque actual actualiza el FCB.
|
|
Uso:
Crear un archivo FCB.
|
|
Registros
de llamada:
- AH = 16H
- DS:DX = Apuntador a un FCB ya abierto.
|
|
Registros
de retorno:
- AL = 00H si no hubo errores, de lo contrario contendra
el valor 0FFH
Se basa en la información proveida en un FCB para
crear un archivo en el disco.
|
|
Uso:
Leer en forma aleatoria un archivo
FCB.
|
|
Registros
de llamada:
- AH = 21H
- DS:DX = Apuntador a un FCB ya abierto.
|
|
Registros
de retorno:
- A = 00H si no hubo error, de lo contrario AH contendra
el código del error: 1 si es fin de archivo, 2 si existe error de especificación de FCB
y 3 si se leyó un registro parcial o el apuntador del archivo se encuentra al final del
mismo.
Esta función lee el registro especificado por los
campos del bloque actual y registro actual de un FCB abierto y coloca la información en
el DTA (área de transferencia de disco o Disk Transfer Area).
|
|
Uso:
Escribir en forma aleatoria en un
archivo FCB.
|
|
Registros
de llamada:
- AH = 22H
- DS:DX = Apuntador a un FCB abierto.
|
|
Registros
de retorno:
- AL = 00H si no hubo error, de lo contrario contendrá el
código del error: 1 si el disco está lleno o es archivo de solo lectura y 2 si hay error
en la especificación de FCB.
Escribe el registro especificado por los campos del
bloque actual y registro actual de un FCB abierto. Escribe dicha información a partir del
contenido del DTA (área de transferencia de disco).
|
|
Uso:
Crear un archivo si no existe o
dejarlo en longitud 0 si existe. (Handle)
|
|
Registros
de llamada:
- AH = 3CH
- CH = Atributo de archivo
- DS:DX = Apuntador a una especificaión ASCIIZ
|
|
Registros
de retorno:
- CF = 0 y AX el número asignado al handle si no hay
error, en caso de haberlo CF será 1 y AX contendra el código de error: 3 ruta no
encontrada, 4 no hay handles disponibles para asignar y 5 acceso negado.
Esta función sustituye a la 16H. El nombre del archivo
es especificado en una cadena ASCIIZ, la cual tiene como característica la de ser una
cadena de bytes convencional terminada con un caracter 0.
El archivo creado contendra los atributos definidos en
el registro CX en la siguiente forma:
Valor Atributos
00H Normal
02H Escondido
04H Sistema
06H Escondido y de sistema
El archivo se crea con los permisos de lectura y
escritura. No es posible crear directorios utilizando esta función.
|
|
Uso:
Abre un archivo y regrese un handle
|
|
Registros
de llamada:
- AH = 3DH
- AL = modo de acceso
- DS:DX = Apuntador a una especificación ASCIIZ
|
|
Registros
de retorno:
- CF = 0 y AX = número de handle si no hay errores, de lo
contrario CF = 1 y AX = código de error: 01H si no es válida la función, 02H si no se
encontró el archivo, 03H si no se encontr´o la ruta, 04H si no hay handles disponibles,
05H en caso de acceso negado, y 0CH si el código de acceso no es válido.
El handle regresado es de 16 bits.
El código de acceso se especifica en la siguiente
forma:
BITS
7 6 5 4 3 2 1
. . . . 0 0 0 Solo lectura
. . . . 0 0 1 Solo escritura
. . . . 0 1 0 Lectura/Escritura
. . . X . . . RESERVADO
|
|
Uso:
Cerrar archivo (Handle).
|
|
Registros
de llamada:
- AH = 3EH
- BX = Handle asignado
|
|
Registros
de retorno:
- CF = 0 si no hubo errores, en caso contrario CF será 1
y AX contendrá el código de error: 06H si el handle es inválido.
Esta función actualiza el archivo y libera o deja
disponible el handle que estaba utilizando.
|
|
Uso:
Leer de un archivo abierto una
cantdad definida de bytes y los almacena en un buffer específico.
|
|
Registros
de llamada:
- AH = 3FH
- BX = Handle asignado
- CX = Cantidad de bytes a leer
- DS:DX = Apuntador a un área de trabajo.
|
|
Registros
de retorno:
- CF = 0 y AX = número de bytes leidos si no hubo error,
en caso contrario CF = 1 y AX = código de error: 05H si acceso negado y 06H si no es
válido el handle.
|
|
Uso:
Escribe a un archivo ya abierto una
cierta cantidad de bytes a partir del buffer designado.
|
|
Registros
de llamada:
- AH = 40H
- BX = Handle asignado
- CX = Cantidad de bytes a escribir.
- DS:DX = Apuntador al buffer de datos.
|
|
Registros
de retorno:
- CF = 0 y AX = número de bytes escritos si no hay
errores, en caso de existir CF = 1 y AX = código del error: 05H si el acceso es negado y
06H si el handle es inválido.
|
|
Uso:
Mover apuntador al archivo (Handle)
|
|
Registros
de llamada:
- AH = 42H
- AL = método utilizado
- BX = Handle asignado
- CX = La parte más significativa del offset
- DX = La parte menos significativa del offset
|
|
Registros
de retorno:
- CF = 0 y DX:AX = la nueva posición del apuntador. En
caso de error CF será 1 y AX = código de error: 01H si la función no es válida y 06H
si el handle no es válido.
El método utilizado se configura como sigue:
Valor de AL Método
00H A partir del principio del archivo
01H A partir de la posición actual
02H A partir del final del archivo
Propósito: Llamar a
diversas funciones de video del BIOS.
Sintaxis:
Int 10H
Esta interrupción tiene diversas funciones, todas ellas
nos sirven para controlar la entrada y salida de video, la forma de acceso a cada una de
las opciones es por medio del registro AH.
En este tutorial unicamente veremos algunas de las
funciones de esta interrupción.
-
|
|
Funciones
comunes de la interrupción 10H.
|
|
02H
Selección de posición del cursor
|
|
09H Escribe
atributo y caracter en el cursor
|
|
0AH Escribe
caracter en la posición del cursor
|
|
0EH Escritura de
caracteres en modo alfanumérico
|
|
Uso:
Posiciona el cursor en la pantalla
dentro de las coordenadas válidas de texto.
|
|
Registros
de llamada:
- AH = 02H
- BH = Página de video en la que se posicionará el
cursor.
- DH = Fila
- DL = Columna
|
|
Registros
de retorno:
- Ninguno.
Las posiciones de localización del cursor son definidas
por coordenadas iniciando en 0,0, que corresponde a la esquina superior izquierda hasta
79,24 correspondientes a la esquina inferior derecha. Tenemos entonces que los valores que
pueden tomar los registros DH y DL en modo de texto de 80 x 25 son de 0 hasta 24 y de 0
hasta 79 respectivamente.
|
|
Uso:
Desplegar un caracter un determinado
número de veces con un atributo definido empezando en la posición actual del cursor.
|
|
Registros
de llamada:
- AH = 09H
- AL = Caracter a desplegar
- BH = Página de video en donde se desplegará
- BL = Atributo a usar
- Número de repeticiones.
|
|
Registros
de retorno:
- Ninguno
Esta función despliega un caracter el número de veces
especificado en CX pero sin cambiar la posición del cursor en la pantalla.
|
|
Uso:
Desplegar un caracter en la
posición actual del cursor.
|
|
Registros
de llamada:
- AH = 0AH
- AL = Caracter a desplegar
- BH = Página en donde desplegar
- BL = Color a usar (sólo en gráficos).
- CX = Número de repeticiones
|
|
Registros
de retorno:
- Ninguno.
La única diferencia entre esta función y la anterior
es que ésta no permite modificar los atributos, simplemente usa los atributos actuales.
Tampoco se altera la posición del cursor con esta
función.
|
|
Uso:
Deplegar un caracter en la pantalla
actualizando la posición del cursor.
|
|
Registros
de llamada:
- AH = 0EH
- AL = Caracter a desplegar
- BH = Página donde se desplegara el caracter
- BL = Color a usar (solo en gráficos)
|
|
Registros
de retorno:
- Ninguno
Propósito: Manejar la
entrada/salida del teclado.
Sintaxis:
Int 16H
Veremos dos opciones de la interrupción 16H, estas
opciones, al igual que las de otras interrupciones, son llamadas utilizando el registro
AH.
-
|
|
Funciones
de la interrupción 16H
|
|
00H
Lee un caracter de teclado
|
|
01H Lee estado
del teclado
|
|
Uso:
Leer un caracter del teclado.
|
|
Registros
de llamada:
- AH = 00H
|
|
Registros
de retorno:
- AH = código de barrido (scan code) del teclado
- AL = Valor ASCII del caracter.
Cuando se utiliza esta interrupción se detiene la
ejecución del programa hasta que se introduzca un caracter desde el teclado, si la tecla
presionada es un caracter ASCII su valor será guardado en el registro AH, de lo contrario
el código de barrido será guardado en AL y AH contendrá el valor 00H.
El código de barrido fué creado para manejar las
teclas que no tienen una representación ASCII como [ALT], [CONTROL], las teclas de
función, etc.
|
|
Uso:
Leer estado del teclado.
|
|
Registros
de llamada:
- AH = 01H
|
|
Registros
de retorno:
- Si la bandera de cero, ZF, está apagada significa que
hay información en el buffer, si se encuentra prendida es que no hay teclas pendientes.
- En caso de existir información el registro AH contendrá
el código de la tecla guardada en el buffer.
Propósito: Manejar la
entrada/salida de la impresora.
Sintaxis:
Int 17H
Esta interrupción es utilizada para escribir caracteres
a la impresora, inicializarla y leer su estado.
-
|
|
Funciones
de la interrupción 16H
|
|
00H
Imprime un caracter ASCII
|
|
01H Inicializa
la impresora
|
|
02H Proporciona
el estado de la impresora
|
|
Uso:
Escribir un caracter a la impresora.
|
|
Registros
de llamada:
- AH = 00H
- AL = Caracter a imprimir
- DX = Puerto a utilizar
|
|
Registros
de retorno:
- AH = Estado de la impresora.
El puerto a utilizar, definido en DX, se especifica
así: LPT1 = 0, LPT2 = 1, LPT3 = 2 ...
El estado de la impresora se codifica bit por bit como
sigue:
BIT 1/0 SIGNIFICADO
----------------------------------------
0 1 Se agotó el tiempo de espera
1 -
2 -
3 1 Error de entrada/salida
4 1 Impresora seleccionada
5 1 Papel agotado
6 1 Reconocimiento de comunicación
7 1 La impresora se encuentra libre
Los bits 1 y 2 no son relevantes.
La mayoria de los BIOS unicamente soportan 3 puertos
paralelos aunque existen algunos que soportan 4.
|
|
Uso:
Inicializar un puerto de impresión.
|
|
Registros
de llamada:
- AH = 01H
- DX = Puerto a utilizar
|
|
Registros
de retorno:
- AH = Status de la impresora
El puerto a utilizar, definido en DX, se especifica
así: LPT1 = 0, LPT2 = 1, etc.
El estado de la impresora se codifica bit por bit como
sigue:
BIT 1/0 SIGNIFICADO
----------------------------------------
0 1 Se agotó el tiempo de espera
1 -
2 -
3 1 Error de entrada/salida
4 1 Impresora seleccionada
5 1 Papel agotado
6 1 Reconocimiento de comunicación
7 1 La impresora se encuentra libre
Los bits 1 y 2 no son relevantes.
La mayoria de los BIOS unicamente soportan 3 puertos
paralelos aunque existen algunos que soportan 4.
|
|
Uso:
Obtener el estado de la impresora.
|
|
Registros
de llamada:
- AH = 01H
- DX = Puerto a utilizar
|
|
Registros
de retorno:
- AH = Status de la impresora.
El puerto a utilizar, definido en DX, se especifica
así: LPT1 = 0, LPT2 = 1, etc.
El estado de la impresora se codifica bit por bit como
sigue:
BIT 1/0 SIGNIFICADO
----------------------------------------
0 1 Se agotó el tiempo de espera
1 -
2 -
3 1 Error de entrada/salida
4 1 Impresora seleccionada
5 1 Papel agotado
6 1 Reconocimiento de comunicación
7 1 La impresora se encuentra libre
Los bits 1 y 2 no son relevantes.
La mayoria de los BIOS unicamente soportan 3 puertos
paralelos aunque existen algunos que soportan 4.
|