Sunteți pe pagina 1din 9

LABORATORIO DE MICROPROCESADORES

Microprocesadores de la arquitectura x86


PRCTICA 4
Funciones de ROMBIOS y MSDOS
Objetivo
Al terminar esta prctica, el alumno ser capaz de:
1. Limpiar pantalla de texto.
2. Posicionar cursor en pantalla de texto de la PC.
3. Visualizar caracteres en pantalla.
4. Interactuar con el teclado ASCII de la PC.
5. Definir atributo de colores en pantalla de texto.
Para usar las funciones de ROMBIOS y MSDOS colocar el nmero de la funcin en el
registro AH. Para los detalles y requerimientos de las funciones consultar APENDICE
A del Texto por BARRY B. BRAY.
ROMBIOS: funciones de servicio de pantalla se ejecutan con la interrupcin INT
10H.
Funcin 00H: pantalla modo texto 25x80.
Funcin 02H: posicin de cursor en pantalla de texto.
Funcin 06H: barre la pantalla de texto.
Funcin 09H: imprime carcter con atributo de color en posicin actual del
cursor.
Funcin 0EH: imprime un carcter en posicin actual del cursor.
Funcin 10H: espera por tecla ACSII, esta funcin se ejecuta con la interrupcin
INT 16H.
MSDOS: estas funciones se ejecutan con la interrupcin INT 21H.
Funcin 01H: espera por tecla ASCII, automticamente genera eco.
Funcin 07H: espera por tecla ASCII, no genera eco.
Funcin 08H: espera por tecla ASCII, responde a CNTL+BREAK y no genera eco.
Funcin 09H; visualiza en pantalla una cadena de caracteres, usa como fin de
cadena el carcter especial $, la direccin inicial de la cadena en registro DS:
DX.
Funcin 4CH: finaliza el programa y devuelve el control al MSDOS.

Semana del 17 al 21 de Noviembre del 2014

INTRODUCCION
Recursos del Sistema
Servicios ROMBIOS y MSDOS
----------------------------------------------------------------------------------------------El MSDOS y el ROMBIOS del PC proveen de rutinas de servicio que se
pueden utilizar para incrementar la versatilidad de los programas del
usuario. A estas rutinas se las llama utilizando las caractersticas de la
interrupcin por software (INT n) del microprocesador.
-----------------------------------------------------------------------------------------------El sistema de entrada salida bsico (BIOS) es un conjunto de
subrutinas almacenadas en ROMBIOS, que pueden usarse para
entrada salida de bajo nivel a distintos dispositivos (pantalla, teclado,
etc.). Esta prctica examinar algunas funciones de BIOS. A nivel del
sistema operativo MSDOS tambin tenemos un conjunto de funciones
o subrutinas que nos ayudaran a interactuar con el teclado ASCII y
pantalla de video.
---------------------------------------------------------------------------------------------La ventana de video en modo texto bajo MSDOS es una matriz de 25
filas x 80 columnas, como se ilustra en el grfico siguiente:
00H, 00H
4FH

00H,

18H, 00H

18H,

-------------------------------------------------------------------------------------------------------------------------------

PRCTICA LABORATORIO
Usando el programa ensamblador MASM, CODEVIEW y el editor de
texto notepad++ resolver los ejercicios siguientes, en lo posible
documente su trabajo mediante fotos de pantalla (use tecla Imprimir
Pantalla).
EJERCICIO 5:
Edite y ensamble P5. Ver ms abajo su tarea.
; **********************************************************************************
; Programa: P5.ASM
; Descripcin: Familiarizacin con algunas funciones de ROMBIOS y MSDOS.
; La funcin 09H de MSDOS visualiza cadena de caracteres.
; La funcin 0EH de ROMBIOS visualiza un solo carcter.
; Con funcin 0EH se imprimen diez caritas negras en lazo LOOP.

; La funcin 10H de ROMBIOS (se ejecuta con INT 16H) espera hasta que el usuario aprete una tecla.
; **********************************************************************************
.MODEL SMALL
.STACK 100H
.DATA
MSJ
DB 'Funcion 0EH de BIOS visualiza un solo caracter: se ejecuta con INT 10H ',13,10
DB 'A continuacion usando la funcion 0EH de BIOS se imprimen diez caritas negras',13,10,'$'
MSJ1
DB 10,13,'La funcion 10H de BIOS espera por tecla : se ejecuta con INT 16H ',13,10
DB 'Para salir presione cualquier tecla...',13,10,'$'
.CODE
inicio: MOV
AX,@DATA
MOV
DS,AX
LEA
DX, MSJ
MOV
AH, 09h;funcion 09h de la interrupcin 21h de MSDOS
INT
21H
MOV
CX,10
LZO:
MOV
AL,02H; ascii de carita negra
MOV
AH,0EH; exhibe en pantalla de texto un carcter
INT
10H; ejecuta funcin 0EH de BIOS
LOOP LZO
MOV
AL,10; avance de lnea LF
MOV
AH,0EH
INT
10H
MOV
AL,13;retorno de cursor CR
MOV
AH,0EH
INT
10H
LEA
DX, MSJ1
MOV
AH,09h;funcion 09h de la interrupcin 21h de MSDOS
INT
21h
MOV
AH,10h ; espera por una tecla
INT
16H
MOV
AX,4C00h
INT
21h
END Inicio
Analizar P5:

----------------------------------------------------------------------------------------------------------------------------Cargue P5.EXE en Codeview, con F10 ejecute paso a paso y conteste las preguntas siguientes:
1. Avance paso a paso hasta la primera INT 21H. Ejecute INT 21H. Haga un clic en pestaa Windows,
luego un clic en View Output. Tome foto al primer mensaje (MSJ) en pantalla de texto. Para
regresar a CODEVIEW aprete barra de espacio.
2. Visualice la ventana memory1 (segmento de datos del programa), apunte al primer carcter de la
cadena MSJ y escriba en su reporte sus 8 primeros caracteres ASCII.
3. Ejecute LZO paso a paso hasta salir con CX=0, nuevamente clic en Windows, clic en View Output.
Confirme el trabajo de la funcin 0Eh de BIOS y tome foto a la pantalla. Regrese a codeview.
4. Avance paso a paso hasta la segunda INT 21H. Ejecute INT 21H. Haga un clic en pestaa Windows,
luego un clic en View Output. Tome foto de mensaje (MSJ1) en pantalla de texto. Regrese a
codeview con barra de espacio.
5. Siga paso a paso hasta la ejecucin de la ltima INT 21H. Observe que devuelve el control a
MSDOS. El programa termina exitosamente.
6. Salga de CODEVIEW.
7. Ejecute P5.exe y no se olvide de apretar cualquier tecla, tomar foto a la pantalla.
;***********************************************************************************

EJERCICIO 6:
Edite, ensamble y corra P6. Ver ms abajo su tarea.
;***********************************************************************************
; Programa: P6.ASM
; Descripcin: El programa implementa el movimiento del cursor en la pantalla de texto (25x80).
; Para ejecutar el movimiento usa las teclas: N (norte), S (sur), E (este) y O (oeste).
; Instrucciones de salto usadas: JMP, JZ (JE), JNZ (JNE) y la instruccin de comparacin CMP.
; Funciones de BIOS usadas:

; Funcin 00H (pantalla modo texto 25x80).


; Funcin 02H (posiciona cursor en pantalla).
; Funcin 06H (usada para limpiar pantalla).
; Funciones de MSDOS usadas:
; Funcin 07H (espera por dato desde teclado ASCII),
; Funcin 09H (visualiza cadena de caracteres en pantalla),
; Funcin 4CH (devuelve el control al MSDOS).
; Macros: SALIR (usa funcin 4CH de MSDOS).
; ***********************************************************************************
TITLE Movimiento del Cursor en Pantalla de Texto
;---------------------------------------------------------------------------------------------------------------------------; Definicin de macro SALIR
SALIR
MACRO
MOV AX, 4C00H
INT
21H
ENDM
;---------------------------------------------------------------------------------------------------------------------------.MODEL SMALL
.STACK 32H
.DATA
FILA
DB 12 ; coordenadas
COL
DB 40 ; del centro de la pantalla
MSJ
DB 'Se sale con tecla ESC. $'
.CODE
PP
PROC FAR
MOV AX, @DATA
MOV DS, AX
CALL MTXT25X80; modo texto 25x80
CALL LPANT; limpia pantalla fija atributo
CALL MENSAJE
CALL PCURSOR; posicin inicial del cursor
LAZO1:
MOV AH, 7
; funcin 7 de MSDOS
INT 21H
; espera hasta que usuario aprete una teclado
CMP AL,'N'
; luego compara ....
JNE SALTO1
CALL NORTE
CALL PCURSOR
JMP
LAZO1
SALTO1:
CMP AL,'S'
JNE SALTO2
CALL SUR
CALL PCURSOR
JMP
LAZO1
SALTO2:
CMP AL,'O'
JNE SALTO3
CALL OESTE
CALL PCURSOR
JMP
LAZO1
SALTO3:
CMP AL,'E'
JNE
SALTO4
CALL ESTE
CALL PCURSOR
JMP
LAZO1
SALTO4:
CMP AL,1BH; para salir verifica por tecla ESC.
JNE
LAZO1
SALIR
RET
PP
ENDP; Fin de PP (Programa Principal)
;*********************************************************************

; LISTADO DE PROCEDIMIENTOS (SUBRUTINAS)


;*********************************************************************
MENSAJE
PROC NEAR
MOV AH, 09H; imprime cadena de caracteres
LEA
DX, MSJ; direccin inicial de la cadena
INT
21H
RET
MENSAJE
ENDP
;*********************************************************************
MTXT25X80
PROC NEAR; Modo Texto 25x80
MOV AH, 0; funcin 0 de BIOS
MOV AL, 3; el cdigo 3 define modo texto 25 filas 80 columnas
INT
10H
RET
MTXT25X80
ENDP
;**********************************************************************
LPANT
PROC NEAR; limpia pantalla de texto
MOV AX, 0600H; AH=06 funcin de BIOS, AL=00(borra ventana)
MOV BH, 0E8H; atributo-fondo amarillo-caracteres negros
MOV CX, 0; fila 0, columna 0
MOV DX, 184FH; fila 18h, columna 4Fh
INT 10H
RET
LPANT
ENDP
;*********************************************************************
PCURSOR
PROC NEAR
MOV AH, 2; funcin 2 de BIOS posiciona cursor
MOV DH, FILA
MOV DL, COL
MOV BH, 0
INT 10H
RET
PCURSOR
ENDP
;****************************************************************
NORTE
PROC NEAR
DEC FILA
CMP [FILA],0FFH
JNZ
SALIRN
MOV [FILA],24
SALIRN:
RET
NORTE
ENDP
;*********************************************************************
SUR
PROC NEAR
INC
FILA
CMP [FILA],25
JNZ
SALIRS
MOV [FILA],0
SALIRS:
RET
SUR
ENDP
;*********************************************************************
ESTE
PROC NEAR
INC
COL
NOP
NOP
NOP
RET
ESTE
ENDP
;*********************************************************************
OESTE
PROC NEAR
DEC
COL

NOP
NOP
NOP
RET
OESTE
ENDP
;***********************************************************************
END
PP
;***********************************************************************
Analizar P6:
1. Ejecute P6.EXE y verifique su funcionamiento.
2. Aprete tecla N y observe el movimiento del cursor, aprete S y observe movimiento.
3. Aprete tecla E y observe movimiento, aprete O y observe movimiento. Hay problemas con el
movimiento horizontal del cursor. Verdad?
4. Modifique el programa para que el cursor en su movimiento horizontal de la vuelta la pantalla de
manera correcta, por ejemplo, si el cursor se sale del borde derecho ste debe aparecer de inmediato
en el borde izquierdo sobre la misma fila, cosa similar cuando se sale del borde izquierdo debe
aparecer de inmediato en borde derecho sobre la misma fila.
5. En su reporte incluya listado de P6.ASM modificado.
6. Dibuje diagrama de flujo (nivel alto) de PP.
;************************************************************************************

Atributos de colores en Pantalla de Texto


FORMATO DE BYTE ATRIBUTO
D7
D6
D5
BL
R
G

D4
B

D3
I

D2
R

D1
G

D0
B

BL= parpadeo
I= intensidad
Parpadeo e Intensidad se aplican solamente para la vista frontal.
R= rojo G= verde
B= azul
tres colores fundamentales.
La vista de fondo toma solamente 8 colores mientras que la vista frontal toma 16 colores.
D3D2D1D0 define vista frontal.
D6D5D4 define la vista de fondo.
Para los colores consultar
Texto Gua del Curso.
EJERCICIO
7:
Edite y ensamble P7.ASM. Ver ms abajo su tarea.
; ***********************************************************************************
; Programa P7.ASM.
; Descripcin: P7 parpadea un mensaje dentro de una ventana en el centro de la pantalla de texto.
; Usa un diseo modular y por lo tanto requiere de la directiva INCLUDE.
; La directiva INCLUDE incorpora al programa fuente el fichero de nombre LABMICP.INC.
; LABMICP.INC contiene los macros y subrutinas que demanda el PP (Programa Principal).
; Para implementar retardos se usa la subrutina DELAY del fichero LABMICP.INC.
; Funciones usadas:
; Funcin 06H de MSDOS para explorar el teclado ASCII.
; Funcin 09H de MSDOS para visualizar cadenas de caracteres.
; Funcin 06H de ROMBIOS para limpiar pantalla con atributo de color.
; Funcin 02H de ROMBIOS para posicionar el cursor.
; ***********************************************************************************

LF

TITLE Parpadeo de un mensaje en centro de pantalla de texto


.MODEL SMALL
.STACK 50
.DATA
EQU
10

CR
MSJINI
MSJFIN
BDIA
BNOCHE

EQU
13
DB
'Para iniciar aprete la tecla 1',LF,CR,'$'
DB
'Para salir aprete cualquier tecla','$'
DB
'BUENOS DIAZ$'
DB
'BUENAS NOCHES$'
.CODE
INCLUDE
LABMICP.INC; LABMICP.INC contiene los macros y las subrutinas
; que demanda el PP (Programa Principal)
;--------------------------------------------------------------------------------------------------------------------; INICIO PROGRAMA PRINCIPAL
PRINCIPAL
PROC FAR
MOV
AX,@DATA
MOV
DS,AX
LPANT
0000H,184FH
CURSOR
5,25
DISPLAY
MSJINI
ESPERAT; apretar tecla 1 para iniciar
CURSOR
5,25
DISPLAY
MSJFIN
LAZO:
LVENT
0C21H,0E2DH
CURSOR
13,34
DISPLAY
BDIA
MOV
CX,33146
CALL
DELAY1
LVENT
0C21H,0E2DH
MOV
CX,33146
CALL
DELAY1
SALIRCT ; aprete cualquier tecla para salir
JZ
LAZO
LPANT
0000H,184FH
CALL
SALIR
NOP
RET
PRINCIPAL
ENDP ; FIN PROGRAMA PRINCIPAL
END
PRINCIPAL
; ***********************************************************************************
; LABMICP.INC
; Descripcin: Este fichero debe almacenarse en la carpeta de trabajo de cada grupo.
; Contiene los macros siguientes:
; LPANT limpia pantalla
; LVENT limpia ventana
; CURSOR posiciona cursor
; DISPLAY visualiza cadenas de caracteres en pantalla
; ESPERAT espera hasta que usuario aprete una tecla
; SALIRCT explora teclado ASCII, se sale de PP apretando cualquier tecla.
; Contiene las subrutinas siguientes:
; DELAY
; DELAY1
; Nota: El usuario puede agregar a este archivo todos los macros y subrutinas que requiera.
; ***********************************************************************************
; Listado de Macros
LPANT
MACRO
M, N
MOV AX,0600H
MOV BH,1FH
MOV CX,M
MOV DX,N
INT
10H
ENDM
; ----------------------------------------------------

LVENT

MACRO
M,N
MOV AX,0600H
MOV BH,4FH
MOV CX,M
MOV DX,N
INT
10H
ENDM
; -------------------------------------------------------CURSOR
MACRO
FILA,COL
MOV AH,2;fija pos cursor
MOV
BH,0;pgina 0
MOV
DH,FILA
MOV DL,COL
INT
10H
ENDM
; -------------------------------------------------------DISPLAY
MACRO
CADENA
MOV
AH,9;
LEA
DX, CADENA
INT
21H
ENDM
; -------------------------------------------------------ESPERAT
MACRO
LAZOT:
MOV DL,0FFH
MOV AH,06H
INT
21H
JZ
LAZOT
CMP AL,31H
JNZ
LAZOT
NOP
ENDM
; ---------------------------------------------------------SALIRCT
MACRO
MOV DL,0FFH
MOV AH,06H
INT
21H
NOP
NOP
ENDM
;---------------------------------------------------------------------------------------------------------------------; Listado de Subrutinas
;----------------------------------------------------------------------------------------------------------------------------; Subrutina DELAY
; La patita PB4 de puerto 61H cambia de estado cada 15.085 microsegundos
; Subrutina DELAY cuenta CX veces 15.085 microsegundos
DELAY
PROC NEAR
PUSH AX
BUCLE:
IN
AL,61H
AND AL,10H
CMP AL,AH
JZ
BUCLE; espera por cambio en PB4
MOV AH,AL; guarda nuevo estad0 de PB4
LOOP BUCLE; la instruccin LOOP primero ejecuta CX <--- CX - 1 luego ...
POP
AX
RET
DELAY
ENDP
;--------------------------------------------------------------------------------------------------------------------; Subrutina DELAY1 implementa un retardo de 100 milisegundos con CX=6629 (base 10)
DELAY1
PROC NEAR
MOV BL,10

DD1:

CALL DELAY
DEC
BL
JNZ
DD1
RET
DELAY1
ENDP
;----------------------------------------------------------------------------------------------------------------------; Subrutina SALIR
SALIR
PROC NEAR
MOV AX,4C00H
INT
21H
RET
SALIR
ENDP
;-----------------------------------------------------------------------------------------------------------------------------Analizar P7:
1. Corra P7.EXE.
2. En reporte incluya FOTO A COLOR de ventana con resultados.
3. Modifique el programa para que parpadee BUENAS NOCHES (ver variable BNOCHE en
segmento de datos) en una ventana con fondo amarillo y los caracteres (BUENAS NOCHES
solamente) en negro. Consulte BYTE ATRIBUTO.
4. Tome foto a color de los nuevos resultados, incluya en reporte listado de P7.ASM modificado.

FIN PRCTICA

S-ar putea să vă placă și