Interrupciones de software

Las interrupciones de software pueden ser activadas directamente por el ensamblador invocando al número de interrupción deseada con la instrucción INT.

El uso de las interrupciones nos ayuda en la creación de programas, utilizandolas nuestros programas son más cortos, es más fácil entenderlos y usualmente tienen un mejor desempeño debido en gran parte a su menor tamaño.

Este tipo de interrupciones podemos separarlas en dos categorias: las interrupciones del sistema operativo DOS y las interrupciones del BIOS.

La diferencia entre ambas es que las interrupciones del sistema operativo son más fáciles de usar pero también son más lentas ya que estas interrupciones hacen uso del BIOS para lograr su cometido, en cambio las interrupciones del BIOS son mucho más rápidas pero tienen la desventaja que, como son parte del hardware son muy específicas y pueden variar dependiendo incluso de la marca del fabricante del circuito.

La elección del tipo de interrupción a utilizar dependerá unicamente de las caracteristicas que le quiera dar a su programa: velocidad (utilizando las del BIOS) o portabilidad (utilizando las del DOS).

Interrupción 21H Propósito: Llamar a diversas funciones del DOS.

Sintaxis:

Int 21H

Nota: Cuando trabajamos en MASM es necesario especificar que el valor que estamos utilizando es hexadecimal.

Esta interrupción tiene varias funciones, para accesar a cada una de ellas es necesario que el el registro AH se encuentre el número de función que se requiera al momento de llamar a la interrupción.

Funciones para desplegar información al video.

02H Exhibe salida 09H Impresión de cadena (video) 40H Escritura en dispositivo/Archivo

StrongFunción 02H Uso:

Despliega un caracter a la pantalla.

Registros de llamada:

AH = 02H DL = Valor del caracter a desplegar.

 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.

EmphasizedFunción 09H

 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.

EmphasizedFunción 40H

 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.

EmphasizedFunción 01H

 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.

EmphasizedFunción 0AH

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

EmphasizedFunción 3FH

 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. Función 0FH

 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 EmphasizedFunción 14H

 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.

EmphasizedFunción 15H

 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.

EmphasizedFunción 16H

 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.

EmphasizedFunción 21H

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

EmphasizedFunción 22H

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

EmphasizedFunción 3CH

 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.

EmphasizedFunción 3DH

 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

EmphasizedFunción 3EH

 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.

EmphasizedFunción 3FH

 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.

EmphasizedFunción 40H

 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.

EmphasizedFunción 42H

 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


Google