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