Práctica 3 - Universidad de Las Palmas de Gran Canaria

Anuncio
Buses y Periféricos (05/06)
Práctica 3
PRACTICA 3
Pequeño entorno de edición
El objetivo de esta práctica es utilizar las interrupciones de BIOS y MSDOS para
presentar un pequeño entorno de edición en el monitor.
Este entorno consistirá en una sección delimitada de la pantalla en la cual se irán
insertando los caracteres que pulsemos por el teclado.
El programa tendrá que limpiar la pantalla. Detectar una pulsación de teclado. Obtener
la tecla pulsada. Escribirla en la siguiente localización de pantalla. Incrementar esta
localización contemplando los límites impuestos. Etc. Cuando los caracteres escritos
alcanzan el final de la última línea debe realizarse un desplazamiento de la pantalla
(scroll) para seguir escribiendo.
Se detectara cuándo se ha pulsado un espacio de manera que se pueda delimitar una
palabra completa. Si en algún momento una palabra queda cortada por haber alcanzado
el borde, deberá trasladar toda la palabra a la línea siguiente.
Las mayúculas y los acentos serán contemplados, aunque el alumno no tendrá que hacer
nada en particular, pues la interrupción de lectura de teclado devuelve el código ascii
del carácter en mayúscula o acentuado cuando se ha pulsado una tecla acompañada de
shift o inmediatamente después de la pulsación de una tilde.
Consideraciones.
Limpiar la pantalla y Desplazamiento. Para limpiar la pantalla, igual que para realizar
el scrolling se utilizará la función 6 o 7 de la interrupción 10h de BIOS. La Interrupción
10h es la que agrupa todas las acciones de bajo nivel a realizar sobre la interfaz de
vídeo. En esta práctica utilizaremos unas pocas.
Las funciones 6 y 7 realizan un scrolling selectivo de la pantalla, la 6 hacia abajo y la 7
hacia arriba. Los parámetros son los siguiente.
AH: número de la función
AL: número de líneas a desplazar
BH: atributo a usar como fondo de borrado (7h)
CH: coordenada y, superior izquierda de la ventana
1
Buses y Periféricos (05/06)
Práctica 3
CL: coordenada x, superior izquierda de la ventana
DH: coordenada y, inferior derecha de la ventana
DL: coordenada x, inferior derecha de la ventana
Con un valor de AL a 0h se borra toda la ventana. Con un valor distinto de cero realiza
el desplazamiento del número de líneas solicitado
Detectar una pulsación de teclado. Para ello utilizaremos una interrupción de
MSDOS, un nivel algo superior que las interrupciones de BIOS. La interrupción 21H
función 8 espera hasta que se pulse una tecla y devuelve el código ascii asignado en AL.
Ya se ha contemplado si está pulsado el bloqueo de mayúsculas o la tecla instantánea.
El tratamiento de las teclas de la sección expandida es ligeramente distinto – acudir a la
documentación -, pero nosotros no utilizaremos tales teclas en esta práctica.
AH=8
devuelve
AL= código ascii de la tecla pulsada
Escribir en la siguiente localización. En primer lugar deberíamos colocar el cursor en
la posición inicial de la ventana. A continuación deberíamos escribir el carácter leído
en la posición del cursor y luego deberíamos actualizar el cursor. Hay que realizar las
comprobaciones pertinentes para que cuando el cursor llegue al final de la fila en la
ventana, se le sitúe al comienzo de la fila siguiente.
Para situar el cursor en un punto de pantalla hay que acudir otra vez a la interrupción
10h de BIOS. La función 2 realiza tal acción. Son sus parámetros:
AH=2h
BH=0
designa la página de trabajo, habitualmente 0
DH= fila donde se colocará el cursor
DL= columna donde se colocará el cursor
Escribir un carácter en pantalla se puede realizar con la interrupción 21h de MSDOS.
Con su función 2. Parámetros
AH=2h
DL= código ascii
2
Buses y Periféricos (05/06)
Práctica 3
Esta función ya actualiza la posición del cursor. No obstante no tienen en cuenta la
ventana que hemos determinado por lo que debemos leer la nueva posición del cursor y
verificar que no alcancemos el final de una línea dentro de la ventana, en cuyo caso
debemos resituar la posición del cursor al comienzo de la siguiente línea.
La función 3h de Int10h lee la posición actual del cursor.
AH=3h
BH=0 página.
devuelve
CH=línea inicial del cursor
CL=línea final del cursor
DH=fila
DL=columna
Desplazar el contenido dela ventana para hacer hueco a la siguiente línea. Para ello
utilizaremos la misma función que ya empleamos para borrar el contenido de la
ventana.
Antes de escribir los caracteres hay que inspeccionarlos en busca de códigos especiales.
Tendremos en cuenta el código de espacio para delimitar palabras y el cr que implica
saltar al comienzo de la línea siguiente (no se debe imprimir este último carácter porque
la interrupción 21h función 2h no tiene en cuenta nuestras limitaciones de ventana y
saltaría al comienzo de la siguiente línea de pantalla.
Formateo de palabras
Para tener en cuenta que no se corten las palabras en la edición sería conveniente que
cada vez que se detecte un comienzo de palabra (primer carácter después del espacio) se
se fuera almacenando la palabra en memoria, así cómo la posición donde se coloca el
primer carácter de la misma en la pantalla. Si se detecta que queda cortada se borrará
todo lo escrito a partir de la posición almacenada y se escribirá la palabra completa en la
siguiente línea.
3
Buses y Periféricos (05/06)
Práctica 3
Realización:
El alumno realizará un programa en ensamblador que presentará, debidamente
comentado en una memoria debidamente documentada, al profesor de la asignatura.
El mínimo exigible es el expuesto arriba, pero el alumno tiene libertad para introducir
cuantas variaciones desee: letras coloreadas, un borde para la zona de escritura, borrado
y coloreado del entorno exterior a la zona de escritura…
4
Buses y Periféricos (05/06)
Práctica 3
En la siguiente página aparece documentación sobre las interrupciones de BIOS e
información sobre el lenguaje ensamblador.
http://www.iro.umontreal.ca/~feeley/cours/ift2240/doc/assembly/int14.html
La Rom Bios de IBM, Ray Duncan Madrid : Anaya Multimedia, 1989
INF 681.31.0 DUN rom/TEL 681.31.0 DUN rom
PC interrupts : a programmer's reference to BIOS, DOS, and third-party calls / Ralf Brown and Jim Kyle. -2nd ed.. -- Reading (Massachusetts) : Addison-Wesley, 1994 TEL 681.31.0 BRO pc
Assembly language programming for the IBM Personal Computer / David J. Bradley. -- Englewood Cliffs
(New Jersey) : Prentice Hall, 1984 INF 800.92 BRA ass
8080/8085 assembly language programming / by Judi N. Fernandez, Ruth Ashley. -- New York : John
Wiley & Sons, 1981 INF 800.92 FER int BIG S-2
80386/80286 assembly language programming / William H. Murray, Chris H: Pappas. -- Berkeley
(California) : Osborne McGraw-Hill, 1986 INF 681.31.0 MUR och
80386/80286 programación en lenguaje ensamblador. -- Madrid : Osborne McGraw-Hill, 1987 INF
800.92 MUR och
Guía del programador en ensamblador para IBM PC, XT, AT y compatibles / Peter Norton, John Socha ;
[traducción, José Félix Rábago]. -- [1ª ed.]. -- Madrid : Anaya Multimedia, 1988 INF 681.31.0 NOR
gui BIG S-2
Guía de programación en lenguaje ensamblador. -- Las Palmas de Gran Canaria : Universidad de Las
Palmas de Gran Canaria, Escuela Universitaria de Informática, 1994 INF 681.31.0 PAD gui
8088-8086/8087 : programación ensamblador en entorno MS DOS / Miguel Angel Rodríguez-Roselló. -Madrid : Anaya Multimedia, 1992-1987 INF 800.92 ROD och
5
Descargar