jueves, 22 de octubre de 2009

INTERRUPCION 21H

INT 21H
La función 21H es la encargada de realizar las lecturas y escrituras aleatorias respectivamente.
El número de registro aleatorio y el bloque actual son usados para calcular la posición relativa del registro a leer o escribir.
El registro AL regresa la misma información que para lectura o escritura secuencial. La información que será leída se regresará en el área de transferencia de disco, así mismo la información que será escrita reside en el DTA.
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.
Interrupción 21H Propósito: Llamar a diversas funciones del DOS.

Funciones para desplegar información al video.
02H Exhibe salida
09H Impresión de cadena (video)
40H Escritura en dispositivo/Archivo
Funciones para leer información del teclado.
01H Entrada desde teclado
0AH Entrada desde teclado usando buffer
3FH Lectura desde dispositivo/archivo
EJEMPLO:
El ejemplo pide entrada, lee hasta 10 caracteres y muestra los caracteres leídos. Si se especifican más de 10 caracteres, se mostrará sólo el primer 10. Si el programa se ejecuta a continuación, una segunda vez, los restantes caracteres (o el 10 de la siguiente, cualquiera que sea menor) se mostrarán inmediatamente. Se asignará el símbolo del sistema pero el programa no se espera para la entrada.

Código de ejemplo

.MODEL SMALL,C
.STACK
.DATA
mybuf BYTE 10 DUP (' ')
pstring BYTE 0Dh,0Ah,"enter data: "
ostring BYTE 0Dh,0Ah,"data entered: "

abyte BYTE ?
.CODE
.STARTUP
; prompt user
mov bx, 1 ; stdout
mov cx, LENGTHOF pstring
mov dx, SEG pstring
mov ds, dx
mov dx, OFFSET pstring
mov ah, 40h
INT 21h
; ignore possible errors

; read data
mov bx, 0 ; stdin
mov cx, LENGTHOF mybuf
mov dx, SEG mybuf
mov ds, dx
mov dx, OFFSET mybuf
mov ah, 3Fh
INT 21h
; ignore possible errors

mov bx, 1 ; stdout
mov cx, LENGTHOF ostring
mov dx, SEG ostring
mov ds, dx
mov dx, OFFSET ostring
mov ah, 40h
INT 21h
; ignore possible errors

mov bx, 1 ; stdout
mov cx, LENGTHOF mybuf
mov dx, SEG mybuf
mov ds, dx
mov dx, OFFSET mybuf
mov ah, 40h
INT 21h
; ignore possible errors

; clear buffer

mov bx, 0 ; stdin
mov cx, 1
mov dx, SEG abyte
mov ds, dx
mov dx, OFFSET abyte
mov ah, 3Fh
INT 21h
mov al, abyte
cmp al, 0Ah
jne clearbuf

.EXIT
END

REFERENCIAS:
http://moisesrbb.tripod.com/unidad6.htm
http://moisesrbb.tripod.com/unidad7.htm
http://support.microsoft.com/kb/113058/es

No hay comentarios:

Publicar un comentario en la entrada