Documente Academic
Documente Profesional
Documente Cultură
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:
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.
;************************************************************************************
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
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