Вы находитесь на странице: 1из 13

Procesamiento en la pantalla y el teclado

Existen varios requisitos para especificar un dispositivo al sistema y solicitar una operacin de entrada o salida.
La instruccin INT (interrupcin), para la mayora de los propsitos, maneja entrada y salida. Los dos tipos de
interrupciones tratados en este captulo son las funciones de INT 10H del BIOS para manejar la pantalla y las
funciones de INT 21H del DOS para mostrar salidas en pantalla y aceptar entradas desde el teclado. Estas
funciones (o servicios) solicitan una accin; para identificar el tipo de operacin que la interrupcin va a realizar,
inserte un nmero de la funcin en el registro AH.

Como convencin, este libro se refiere al nmero 0DH como el carcter Enter para el teclado y como retorno de
carro para la pantalla y la impresora.

FUNCIONES DE LA INT 10H DEL BIOS FUNCIONES DE LA INT 21H DEL DOS
02H Fija el cursor 02H Despliega en pantalla
06H Recorte la pantalla 09H Despliega en pantalla
0AH Entrada desde el teclado
3FH Entrada desde el teclado
LA PANTALLA

La pantalla es una malla de posiciones direccionables, en cualquiera de las cuales se puede colocar el cursor. Por
ejemplo, un monitor comn de video tiene 25 renglones (numerados del 0 hasta el 24) y 80 columnas
(numeradas desde 0 hasta 79). A continuacin se muestran varios ejemplos de ubicaciones del cursor:

Formato decimal Formato hexadecimal


Ubicacin en pantalla Rengln columna Rengln columna
Esquina superior izquierda 00 00 00H 00H

Esquina superior derecha 00 79 00H 4FH

Centro de la pantalla 12 39/40 0CH 27H/28H

Esquina inferior izquierda 24 00 18H 00H

Esquina inferior derecha 24 79 18H 4FH

El sistema proporciona espacio en la memoria para un rea de despliegue de video, o bfer. El rea de despliegue
monocromtico inicia en la localidad de BIOS B000[0]H y permite utilizar 4K bytes de memoria: 2K disponibles
para caracteres y 2K para atributos para cada carcter, como video inverso, intermitencia, intensidad y
subrayado. El despliegue bsico de video grfico en color permite utilizar 16K bytes iniciando en la localidad de
BIOS B800[0]H. Se puede procesar ya sea en modo de texto para carcter normal o en modo grfico. Para modo
de texto, el rea de despliegue ofrece para la pantalla pginas numeradas desde la cero hasta la tres para una
pantalla de 80 columnas, con bytes para cada carcter y su atributo.
COLOCACIN DEL CURSOR

La colocacin del cursor es un requisito comn en modo de texto, ya que su posicin en dnde ser desplegado
el siguiente carcter. (El modo grfico no permite el uso del cursor.) La INT 10H es la operacin del BIOS para
manejo de la pantalla, y la funcin 02H en el AH indica la operacin que coloca al cursor. Se carga el nmero de
pgina (o pantalla), por lo comn 0, en el registro BH y en el DX el rengln y columna requeridos.

Las instrucciones siguientes colocan el cursor en el rengln 05, columna 12:

MOV AH,02H ;Peticin para colocar el cursor


MOV BH,00 ;Nmero de pgina 0
MOV DH,05 ;Rengln 05
MOV DL,12 ;Columna 12
INT 10H ;Interrupcin que llama al BIOS

Para establecer el rengln y columna en el DX tambin puede utilizar una instruccin MOV con un valor
hexadecimal inmediato, como

MOV DX, 050CH ;Rengln 05, columna 12


LIMPIAR LA PANTALLA

La funcin 06H de la INT 10H del BIOS maneja el borrado o recorrido de la pantalla. Puede limpiar todo o parte de
un despliegue iniciando en cualquier localidad de la pantalla y terminando en cualquier localidad con nmero
mayor. Por ejemplo, para limpiar toda la pantalla especifique el rengln: columna iniciales como 00:00H y el
rengln: columna finales como 18:4FH cargue estos registros:
AH = funcin 06H
AL = 00H para la pantalla completa
BH = nmero del atributo
CX = rengln: columna iniciales
DX = rengln: columna finales

En el ejemplo siguiente el atributo 71H establece toda la pantalla con fondo blanco (7) con primer plano azul (1):

MOV AX,0600H ;AH 06 (recorrido), AL 00 (pantalla completa)


MOV BH, 71H ;Atributo blanco (7) sobre azul (1)
MOV CX,0000H ;Esquina superior izquierda rengln: columna
MOV DX, 184FH ;Esquina inferior derecha rengln: columna
INT 10H ;Interrupcin que llama al BIOS

Si de modo equivocado establece usted la ubicacin de la esquina inferior derecha de la pantalla en algo mayor
que 184FH, la operacin de vuelta a la pantalla y limpia dos veces algunas localidades. Esto puede causar un
error en algunos sistemas.
FUNCIN 09H DEL DOS PARA DESPLIEGUE EN PANTALLA

Requiere la definicin de una cadena de despliegue en el rea de datos. La cadena es seguida inmediatamente
por un delimitador de signo de pesos ($, o 24H), el cual utiliza la operacin para finalizar el despliegue. El ejemplo
lo ilustra:

NAMPRMP DB Nombre de Cliente?,$ ;Cadena de despliegue

Puede codificar el signo de pesos inmediatamente despus de la cadena de despliegue como se mostr, como
parte de la cadena como en Nombre del cliente?$,o en la lnea siguiente como en DB $. Sin embargo, el
resultado es que no puede utilizar esta funcin para desplegar en la pantalla un carcter $.
Coloque la funcin 09H en el registro AH, utilice LEA para cargar la direccin de la cadena de despliegue en el DX,
y emita una instruccin INT 21H. La operacin despliega los caracteres de izquierda a derecha y reconoce el final
de los datos al encontrar el delimitador de signo de pesos ($). El cdigo en lenguaje ensamblador es:

MOV AH, 09H ;peticin para desplegar


LEA DX, NAMPRMP ;carga la direccin de la indicacin
INT 21H ;Llama al DOS

Si al final de la cadena se omite el signo de pesos, la operacin despliega caracteres de la memoria hasta que
encuentre un signo as, si existe alguno.
Uso de la funcin 09H de la INT 21H para desplegar caracteres ASCII
Page 60,132
TITLE Exhibe los caracteres ASCII 00H-FFH
.MODEL SMALL
.DATA
CHAR DB 00,$
.CODE
MAIN PROC NEAR
;-------------------- Despejar pantalla:
MOV AX,0600H ;Recorre toda la pantalla
MOV BH,07 ;Atributo: blanco sobre negro
MOV CX,0000 ;Posicin izquierda superior
MOV DX,184FH ;Posicin derecha interior
INT 10H
;---------------------Fijar cursor en 00,00:
MOV AH,02H ;Peticin de fijar cursor
MOV BH,00 ;Pgina No. 0
MOV DX,0000 ;Hilera 0, columna 0
INT 10H
;-------------------Exhibir caracteres ASCII
MOV CX,256 ;Iniciar 256 interaciones
LEA DX,CHAR ;Iniciar direccin de carcter
D20: MOV AH,09H ;Exhibir carcter ASCII
INT 21H
INC CHAR ;Incrementar para el siguiente carcter
LOOP D20 ;Decrementar CX, ciclo diferente de cero

MOV AX,4C00H ;Salir a DOS


INT 21H
MAIN ENDP
END BEGIN
Puede corregir el programa para librar el intento de desplegar los caracteres de control. Las instrucciones
siguientes evitan todos los caracteres entre 08H y 0DH; puede querer experimentar con esta deviacin, digamos,
slo para 08H (Retroceso) y 0DH (Retorno de carro).

CMP CHAR,08H ; Menor a 08H?


JB D30 ; S, entonces aceptar
CMP CHAR,0DH ; Menor o igual a 0DH?
JBE D40 ; S, ENTONCES EVITARLO
D30:
MOV AH,09H ; Desplegar los menores que 08H
... ; Y los mayores que 0DH
INT 21H ; Llama al DOS
D40:
INC CHAR
FUNCIN 0AH DEL DOS PARA ENTRADA DEL TECLADO

El rea de entrada para los caracteres tecleados requiere de una lista de parmetros que contenga los campos
especificados que la operacin INT va a procesar. Primero, la interrupcin necesita conocer la longitud mxima de
los datos de entrada. Segundo, la operacin enva a la lista de parmetros el nmero de bytes que realmente se
introdujeron.

El cdigo que sigue define una lista de parmetros para un rea de entrada. (Si ha trabajado en un lenguaje de
alto nivel, puede ser que haya utilizado el trmino registro o estructura.) LABEL es una directiva con el tipo de
atributo de BYTE, que solo provoca alineacin en un lmite (o frontera) de byte. El primer byte contiene su lmite
del nmero mximo de caracteres de entrada. El mnimo es cero y, ya que es un campo de un byte, el mximo es
FFH, o 255. Usted decide sobre el mximo, con base en la clase de datos que espera que los usuarios
introduzcan. El segundo byte es para la operacin que almacena el nmero real de caracteres introducidos como
un valor binario. El tercer byte inicia un campo que contiene los caracteres tecleados, de izquierda a derecha. El
cdigo en lenguaje ensamblador es:

NAMEPAR LABEL BYTE ;Inicio de la lista de parmetros


MAXLEN DB 20 ;Nmero mximo de caracteres de entrada
ACTLEN DB ? ;Nmero real de caracteres de entrada
NAMEFLD DB 20 DUP( ) ;Caracteres introducidos del teclado
En la lista de parmetros, la directiva LABEL indica al ensamblador que alinee en un lmite de byte y d a la
localidad el nombre NAMEPAR. Puesto que LABEL no ocupa espacio, NAMEPAR y MAXLEN se refieren a la misma
localidad de memoria.
Para solicitar una entrada, establezca la funcin 0AH en el AH cargue la direccin de la lista de parmetros (en el
ejemplo NAMEPAR), en el DX, y emita INT 21H:

MOV AH,0AH ;Peticin de la funcin de entrada


LEA DX,NAMEPAR ;Carga la direccin de la lista de parmetro
INT 21H ;Llama al DOS

La operacin INT espera que el usuario introduzca caracteres y verifica que no exceda el mximo (20 en MAXLEN
en la lista de parmetros). La operacin repite cada carcter en la pantalla y avanza el cursor. El usuario presiona
la tecla Enter para sealar el final de la entrada. La operacin tambin trasfiere el carcter Enter (0DH) al campo
de entrada (en el ejemplo, NAMEFLD) pero no lo cuenta en la longitud real. Si teclea un nombre como BROWN
(Enter), la lista de parmetros es como lo siguiente:

ASCII: 20 5 B R O W N # ...


HEX: 14 05 42 52 4F 57 4E OD 20 20 20 20
CMO ACEPTAR Y DESPLEGAR NOMBRES

El siguiente programa, pide al usuario que introduzca un nombre y despus lo despliega en el centro de la
pantalla y emite un sonido la bocina. Por ejemplo, si el usuario introduce el nombre Pat Brown, el programa
realiza lo siguiente:

1. Divide la longitud 09 entre dos: 9/2=4, ignorando la fraccin.


2. Resta este resultado de 40: 40-4= 36.

La instruccin SHR corre la longitud 09 un bit a la derecha dividiendo de hecho la longitud entre 2. Los bits
00001001 se convierten en 00000100, o 4. La instruccin NEG invierte el signo, cambiando +4 a -4. ADD suma el
valor 40, dando en el registro DL la posicin inicial de la columna, 36. Con el cursor colocado en el rengln 12,
columna 36, el nombre aparece en la pantalla.

Page 60,132
TITLE Acepta nombres y los centra en la pantalla
;-----------------------------------------------------------------------
.MODEL SMALL
.STACK 64
;--------------------------------------------------------
.DATA
NAMEPAR LABEL BYTE ; Lista de parmetros nombre:
MAXNLEN DB 20 ; longitud mxima de nombre
NAMELEN DB ? ; no.de caracteres introducidos
NAMEFLD DB 21 DUP(' ') ;nombre introducido
PROMPT DB 'Name? ','$'
;--------------------------------------------------
.CODE
BEGIN PROC FAR
MOV AX,@data ; Iniciar registro
MOV DS,AX ; de segmento
MOV ES,AX
CALL Q10CLR ; Despejar pantalla
A20LOOP:
MOV DX, 0000 ; Fijar cursor en 00,00

MOV AH,02H ; Peticin de ubicar cursor


MOV BH,00 ; Pgina 0
INT 10H
;---------------------------------------------------------------------
MOV AH,09H ; Peticin de exhibicin
LEA DX,PROMPT
INT 21H ; Exhibir indicacin
;---------------------------------------------------------------------
MOV AH,0AH ; Peticin de teclado
LEA DX,NAMEPAR ; entrada
INT 21H ; Proporciona entradas del nombre
;---------------------------------------------------------------------
MOV AX,0600H ; Peticin de recorrido de pantalla
MOV BH,30 ; Color (07 para Blanco y Negro)
MOV CX,0000 ; De 00,00
MOV DX,184FH ; A 24,79
INT 10H ; Despejar pantalla
;--------------------------------------------------------------------
CMP NAMELEN, 00 ; Se ingres el nombre?
JE A30 ; no, salida
;--------------------------------------------------------------------
MOV BH,00 ; Remplaza carcter Enter (0D)
MOV BL,NAMELEN ; con el de la campana (07)
MOV NAMEFLD[BX],07
MOV NAMEFLD[BX+1],'$'; Pone el delimitador de exhibicin
; Fijar campana y $
;--------------------------------------------------------------------
MOV DL,NAMELEN ; Localiza columna central:
SHR DL,1 ; Divide longitud en 2,
NEG DL ; invierte el seguro
ADD DL,40 ; suma 40
MOV DH,12 ; Centra hilera

MOV AH,02H ; Peticin de ubicar cursor


MOV BH,00 ; Pgina 0
INT 10H ; Fija cursor

MOV AH,09H
LEA DX,NAMEFLD ; Exhibe nombre
INT 21H ; Centra y exhibe el nombre
;-------------------------------------------------------------------
JMP A20LOOP
A30:
MOV AX,4C00H ; Salir a DOS
INT 21H
BEGIN ENDP
END BEGIN

Вам также может понравиться