Web ByP - ITIS - Universidad de Las Palmas de Gran Canaria

Anuncio
Buses y Periféricos 2006/2007
Práctica 3. Ensamblador
Calculadora
Descripción
El objetivo de esta práctica es utilizar las interrupciones de BIOS y MSDOS para
presentar una pequeña calculadora en pantalla.
Se pretende programar una calculadora que opere en varias bases: binario, octal,
decimal y hexadecimal. Las operaciones a realizar son las operaciones simples: suma,
resta, multiplicación y división.
Cada base se representará por un color de manera que cuando se seleccione la base
todos los caracteres dibujados en la pantalla adoptarán el color correspondiente.
La forma de seleccionar la base será pulsando la tecla de tabulación. Sucesivas
pulsaciones de esa tecla hará que se salte a la siguiente base de menor a mayor. Pasando
de hexadecimal a binario otra vez.
Cada vez que se pulsa el tabulador para cambiar de base se resetea el cálculo actual.
Estando en cada base sólo se admitirán los dígitos admitidos en esa base, si se pulsara
un dígito no admitido o cualquier otra tecla que no sea una de las de operación, se
ignorará.
Interiormente todas las operaciones se realizarán en binario por lo que el programa debe
leer los dígitos pulsados, mostrarlos en pantalla y luego cambiar la codificación a
binario con independencia de la base de entrada, realizar la operación y luego volver a
codificar en la base actual para mostrar por pantalla el resultado.
La pantalla se dividirá en tres secciones. En una se mostrará la base actual en letra con
el color correspondiente a la base, en otra se mostrará la entrada actual y en una tercera
sección se mostrará el resultado cuando corresponda. La casilla de resultado
permanecerá a cero mientras se está tecleando la entrada.
1
Buses y Periféricos 2006/2007
Práctica 3. Ensamblador
Base
Entrada
Resultado
La pantalla de la calculadora no ocupará todo el monitor sino solo una sección
delimitada de menos de un cuarto de la pantalla del monitor. El alumno puede
localizarla en cualquier parte.
Requerimientos
Las funciones básicas que se requieren son: leer de teclado, escribir en pantalla con un
determinado color de letra, mover o colocar el cursor en una posición determinada de la
pantalla, limpiar una sección de pantalla. Para todas ellas vamos a utilizar las funciones
de suministradas por la BIOS del sistema.
La invocación a estas funciones se realiza invocando a una interrupción software. En
ensamblador de la familia x86 se invoca una interrupción software con la instrucción
INT poniendo a continuación el índice de la instrucción. La BIOS distribuye diferentes
funciones entre diferentes interrupciones (no así el sistema operativo MSDOS que
agrupa todas las llamadas al sistema en la interrupción 21h, diferenciándolas por un
parámetro introducido por el registro AH.)
En concreto las funciones de teclado están en la interrupción 16h. Observar cómo se
distingue entre teclado y teclado expandido y cómo algunas funciones son bloqueantes
mientras que otras son de simple consulta.
Las de pantalla se encuentran en la interrupción 10h. Para limpiar toda o parte de la
pantalla se recomienda, por ejemplo, utilizar la función 6h o 7h que sirven tanto para
realizar un scrolling como para borrar una sección de la pantalla. Aquí también se
2
Buses y Periféricos 2006/2007
Práctica 3. Ensamblador
encuentran las funciones para localizar el cursor en cualquier parte de la pantalla y para
escribir un carácter en esa posición del cursor.
Documentación:
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
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
3
Buses y Periféricos 2006/2007
Práctica 3. Ensamblador
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
Pero esta función no permite añadir el atributo, que es tomado por defecto. La
interrupción de BIOS correspondiente 10h, tiene una función 09h que permite escribir
un carácter y su atributo en la posición del cursor.
AH=09h
AL= código ascii
BH=página
BL= atributo
CX= número de caracteres a escribir.
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
4
Buses y Periféricos 2006/2007
Práctica 3. Ensamblador
DL=columna
Bibliografía.
Se encuentran en interned multitud de páginas que describen cada una de las
interrupciones BIOS y MSDOS. Así como tutoriales de introducción al ensamblador.
Rodríguez Rosello, Miguel Angel
8088-8086/8087 : programación ensamblador en entorno MS DOS / Miguel Angel Rodríguez-Roselló
Norton, Peter
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.]
Padrón Morales, Gabino
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
5
Descargar