Práctica 0. Emulador XENON de la computadora CESIUS

Anuncio
Informática Grado en Ingeniería Aeroespacial Práctica 0. Emulador XENON de la computadora CESIUS 1. Introducción El objeto de la presente práctica es permitir al alumno ensayar y familiarizarse con los conceptos de programación de computadoras digitales desarrollados en el curso de la asignatura. Para ello se hará uso un emulador de la computadora virtual CESIUS basada en la estructura de Von-­‐Neumann. El término virtual hace referencia al hecho de que dicha máquina no existe físicamente como tal. Por ello se ha desarrollado un emulador virtual, denominado XENON, que consta de un entorno de programación multiplataforma que permiten programar, depurar y emular el comportamiento la computadora con programas desarrollados en el lenguaje de la máquina CESIUS. Esta práctica está enfocada a que el alumno se familiarice con el entorno de programación del emulador XENON. XENON es una aplicación de libre distribución programada en tecnología JAVA y disponible en: http://www.esi2.us.es/~jaar/docencia.htm 2. Entornos de programación El entorno de programación XENON está dividido en 2 aplicaciones diferentes, cuyas funciones son fácilmente accesibles mediante iconos (véase Figura 1. Entorno de programación principal XENON). A continuación se describen brevemente ambas. ü Entorno de programación: Traductor Es un entorno de programación ensamblador basado en un Lenguaje Simbólico de 2 pasos (LS2). El programa se encuentra en el archivo “xenon.main.jar” que una vez ejecutado aparece como en la ventana mostrada en la Figura 1. Entorno de programación principal XENON. Dicho programa produce ficheros ejecutables a partir de ficheros de texto (código ASCII) escritos en LS2, con extensión “.ls2”. Figura 1. Entorno de programación principal XENON. Práctica 0. Curso 2015/16 1
Informática Grado en Ingeniería Aeroespacial El programa posee un traductor (denominado en el mundo profesional compilador) que además de traducir el programa en LS2 a código binario (denominado en el mundo profesional código máquina), genera mensajes por pantalla informando del resultado de dicho proceso de traducción. Se puede acceder al mismo a través del icono desde la ventana principal . Si el proceso ha sido correcto el mensaje será Compilación de nombre_archivo.ls2 correcta y guardada en nombre_archivo.ece. En otro caso, el traductor informa de los posible errores de traducción detectados en el proceso, informando además de la línea en que se ha producido el error. El código binario o código máquina se escribe en un fichero en el mismo directorio de trabajo. El nombre de dicho fichero se genera de forma automática como nombre_archivo.ece. Como se verá a continuación dicho fichero se usará como entrada para el programa de ejecución. ü Entorno de programación : Depurador El mismo entorno de programación contiene un acceso al Depurador, a través del icono , que es una aplicación que permite ejecutar los programas instrucción a instrucción, mostrando al mismo tiempo el contenido de los registros y la memoria de CESIUS, y facilitando la comprensión del funcionamiento de la máquina, y a su vez la localización de posibles errores de programación. En la Figura 2. Depurador del emulador XENON. se muestra la ventana del Depurador. Figura 2. Depurador del emulador XENON. ü Entorno de programación: Ejecutar Para poder cerrar el ciclo de programación completo, el entorno de programación permite también ejecutar el programa binario (objeto binario), a través del icono . Como se ha dicho más arriba la aplicación genera un fichero para almacenarlo de forma automática denominado nombre_archivo.ece. En resumen, esta aplicación permite emular la ejecución de un programa y muestra los resultados obtenidos en pantalla como si dicha computadora existiese realmente. Esta aplicación para ejecución de los programas también se distribuye por separado y se encuentra en el archivo “xenon.emu.jar”. Con ella se puede ejecutar el código binario creado directamente, proporcionándole el fichero nombre_archivo.ece como entrada, tantas veces como se desee. Práctica 0. Curso 2015/16 2
Informática Grado en Ingeniería Aeroespacial 3. Desarrollo de la Práctica Para ilustrar los conceptos de programación de computadores y permitir que el alumno se familiarice con el emulador XENON, se propone la realización y análisis de dos programas. El primero consiste en el desarrollo de un programa que calcule la media aritmética de dos números enteros que introduzca el usuario por teclado. Las tareas a realizar por dicho programa son: 1. Leer dos números que el usuario introduzca por teclado, y almacenarlos en memoria. 2. Calcular la media aritmética y almacenar el resultado en memoria. 3. Escribir el resultado en la pantalla. La secuencia de operaciones a efectuar por el alumno son las siguientes: a) Preparación de archivos y directorios Ejecutar la aplicación “xenon.main.jar” y crear un nuevo Proyecto denominado por ejemplo ”media”. Con ello se crea la carpeta y estructura de directorios correcta en el disco duro del PC. b) Escritura del código fuente en lenguaje LS2 De forma automática la aplicación crea el archivo vacío ORG 0
“media.ls2”. Seleccionando dicho nombre en el menú de la SAL INI
A:
ESP 1
izquierda, se activa el editor de textos propio de la aplicación y nos B:
ESP 1
permite escribir la secuencia de instrucciones en la ventana de la C:
ESP 1
parte derecha. El código fuente completo en LS2 para dicho DOS:
CTE 2
programa de cálculo de la media se detalla al margen. Una vez INI:
LEE A
escrito dicho programa en LS2 se guarda desde el menú LEE B
desplegable archivo o desde el icono correspondiente. Todo el CAR A
código está ahora guardado en el archivo “media.ls2” dentro del SUM B
directorio “media”. DIV DOS
ALM C
ESC C
c) Traducción (compilación) del código fuente ALT
Para comprobar que el código funciona correctamente FIN
generaremos un fichero ejecutable a partir de nuestro fichero fuente empleando el programa traductor. Para traducir el programa fuente almacenado en el fichero media.ls2, ejecutaremos el traductor a través del icono correspondiente descrito en la sección anterior. El traductor nos informará si el proceso se ha realizado correctamente o si hay fallos de codificación. En este último caso se debe volver a revisar el código fuente visualmente y modificarlo en consecuencia. d) Ejecución del programa traducido (compilado) y obtención de resultados La ejecución del programa traducido correctamente se hace a través del icono correspondiente descrito en la sección anterior, tras lo cual seguiremos las solicitudes de entrada de datos requeridas por el programa en la pantalla virtual de la computadora. Introduciremos los números enteros solicitados por el programa, y obtendremos su media aritmética como resultado. Recordemos que la computadora CESIUS únicamente maneja números enteros por lo que los resultados fraccionarios aparecerán truncados, esto es, el programa mostrará como resultado de la media de 3 y 6, el número 4 y no 4.5. e) Análisis del programa En este apartado el alumno deberá completar la Tabla 1. Depuración del programa media que se muestra más adelante. Para ello deberá seguir instrucción a instrucción la ejecución del programa desde el principio utilizando el Depurador de la aplicación y anotando los cambios que cada instrucción provoca en las celdas de memoria con etiquetas A, B y C así como los registros A, P, S y E Práctica 0. Curso 2015/16 3
Informática Grado en Ingeniería Aeroespacial de la computadora. Para ello se proporciona el estado inicial de dichas celdas y registros. La pantalla del Depurador, al que se accede a través del icono correspondiente descrito en la sección anterior, se divide en varias zonas donde se muestran todos los registros de la computadora A, I, P, S, T y E y el teclado y pantalla virtuales. A la derecha se muestra la memoria en una ventana dividida en dos partes. Cada vez que ejecuta una instrucción se refresca el contenido de los registros y celdas de memoria además de su color. Es preciso tener en cuenta la actualización del contenido se realiza justo al terminar la ejecución de una instrucción, por lo que el registro P apunta a la instrucción siguiente, pero ésta no ha sido leída aún de la memoria. De este modo, podemos rellenar la tabla, teniendo en cuenta los valores para las celdas de memoria y registros correspondientes a una determinada instrucción. Recuérdese que el Depurador sustituye las etiquetas del código fuente por las direcciones de memoria a las que apuntan, por lo que el ‘aspecto’ de las instrucciones que muestra el depurador no es idéntico al código fuente tecleado. El código que presenta el depurador no tiene etiquetas, sino valores numéricos de posiciones de memoria. Estos valores numéricos pueden mostrarse en las bases binaria, decimal y hexadecimal desde el menú vista. Además recuerde que las pseudoinstrucciones no generan código y constituyen únicamente directivas del programa traductor, como por ejemplo la sentencia ORG 0, que indica la posición de memoria en la que comienza a generarse el código, pero no genera ninguna instrucción. Por este motivo, no deben rellenarse las celdas correspondientes a estas pseudoinstrucciones que aparecen rellenas con el símbolo ‘-­‐‘ en la tabla. Por último recuerde que las posiciones de memoria dependen del valor indicado con la pseudoinstrucción ORG. En este caso es ORG 0 por lo que A, B y C se corresponden con las direcciones 1, 2 y 3. NOTA IMPORTANTE: La Tabla 1. Depuración del programa media debe interpretarse del siguiente modo: cada fila presenta el valor de las celdas de memoria y registros justo DESPUÉS de la ejecución de la instrucción de la primera columna de dicha fila. Por ejemplo, si tenemos una instrucción como CAR VALOR en la posición de memoria 3, deberemos anotar como contenido del registro P (puntero de instrucción) el valor 3 (posición de memoria donde se encuentra la instrucción), si bien el valor del registro acumulador no se actualizará con el valor M(VALOR) hasta la siguiente instrucción. Tabla 1. Depuración del programa media
Instrucción Estado inicial A:
B:
C:
DOS:
INI:
ORG
SAL
ESP
ESP
ESP
CTE
LEE
LEE
CAR
SUM
DIV
ALM
ESC
ALT
FIN
0
INI
1
1
1
2
A
B
A
B
DOS
C
C
A 0 -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ Celdas Memoria B C 0 0 -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ A 0 -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ Registros P 0 -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ S 0 -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ E 0 -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ Práctica 0. Curso 2015/16 4
Informática Grado en Ingeniería Aeroespacial 4. Programación de vectores Los vectores se almacenan en la memoria de CESIUS usando varias posiciones de memoria consecutivas. Para ello basta con reservar memoria como VEC: ESP 3, o VEC: ESP 4, etc. Para poder localizar las diferentes componentes del vector en la memoria es necesario disponer de la posición de memoria en la que comienza dicho vector, es decir la dirección de la primera componente del vector. Para ello se utiliza la directiva DRE, por ejemplo DCV: DRE VEC. Si se necesita operar con una componente concreta del vector, por ejemplo la k-­‐ésima componente (vK) se puede ver que la dirección en la que se encuentra es DCV + k -­‐ 1. Mediante el modo indirecto de instrucción es ahora posible acceder a dicha posición de memoria. Por ejemplo, si en la posición de memoria PUN se tiene la dirección 20, entonces LEE I PUN permite leer un dato almacenándolo en la memoria en la posición 20. Si se incrementa PUN y se procede igual es posible leer en la posición 21, 22, etc. ORG 0
SAL INI
Lectura de un vector VEC: ESP 3
En este primer punto se va a realizar un programa que lea un vector de K:
ESP 1
tres componentes. El alumno debe escribir el código fuente del recuadro al PUN: ESP 1
margen en un archivo de texto vector.ls2. Después ha de traducirlo y UNO: CTE 1
depurarlo con el emulador XENON observando que la ejecución del mismo TRES: CTE 3
es la correcta. Durante la simulación usando el depurador preste especial DCV: DRE VEC
atención a las operaciones indirectas. Centre para ello el visor de memoria INI: CAR UNO
ALM K
en torno al vector. BLE: CAR DCV
SUM K
Cálculo de la media aritmética de las componentes de un vector RES UNO
Añada al programa anterior las sentencias necesarias para que además de ALM PUN
la lectura del vector calcule y escriba la media de sus componentes. LEEI PUN
Traduzca y ejecute el programa comprobando el correcto funcionamiento. CAR K
SUM UNO
NOTA: Se necesitará una variable auxiliar para almacenar la suma parcial, ALM K
RES TRES
que valdrá inicialmente cero. A esta variable hay que sumarle cada SAN BLE
componente del vector, para lo cual se puede usar un bucle como el de SAC BLE
lectura pero usando SUM I PUN. Tenga en cuenta que en un bucle siempre ALT
hay un bloque de inicio antes de las iteraciones, en este bloque se FIN
proporciona valor inicial a las variables que se vayan a usar en el bucle. 5. Programación de matrices Las matrices se almacenan en la memoria de CESIUS igual que los vectores usando varias posiciones de memoria consecutivas. Como las matrices tienen 2 dimensiones dicho almacenamiento consecutivo se puede hacer por filas o por columnas. Usaremos aquí el almacenamiento por filas consecutivas. Al igual que en los vectores primero hay que reservar la memoria necesaria como MAT: ESP 4, o MAT: ESP 9, etc. Para poder localizar las diferentes componentes de la matriz en la memoria es necesario disponer de la posición de memoria en la que comienza dicha matriz, es decir la dirección de la primera componente de la matriz, y para ello se utiliza la directiva DRE, por ejemplo DCM: DRE MAT. Si se necesita operar con una componente concreta de una matriz de M filas y N columnas (AMN), por ejemplo la componente kj-­‐ésima (akj), se puede ver que la dirección en la que se encuentra en la memoria es Mediante el modo de direccionamiento indirecto en las instrucciones puede accederse fácilmente a Dirección de { akj } = DCM + (k – 1)*N + j – 1, donde la dirección de { a11 } = DCM Práctica 0. Curso 2015/16 5
Informática Grado en Ingeniería Aeroespacial dicha posición de memoria operando como en los vectores, es decir usando dicho modo antes de hacer cualquier operación con las componentes de la matriz. Lectura de una matriz En este primer apartado se va a realizar un programa que lea una matriz de M filas y N columnas. El alumno debe entender perfectamente el algoritmo propuesto al margen, prestando especial atención a la estructura de programación con dos bucles anidados (uno dentro del otro), y analizando si dicho algoritmo cumple las leyes básicas de la programación estructurada explicadas en clase. Una vez analizado en detalle dicho algoritmo debe escribir el código fuente del recuadro del margen derecho en un archivo de texto matriz.ls2. Después ha de traducirlo y depurarlo con el emulador XENON observando que la ejecución del mismo es la correcta. Para ello recuerde que puede centrar el visor de memoria en torno a la matriz. Durante la simulación usando el depurador preste especial atención a las operaciones indirectas. Para asimilar conceptos se ha incluido en la tabla de abajo las direcciones de memoria, en decimal, relacionadas con las componentes de la matriz y su contenido. LS2
M:
N:
MAT:
DCM:
PUN:
J:
DIRECCCION
. . .
1
2
3
4
. . .
6
103
104
105
. . .
MEMORIA
. . .
0
0
{a11}
{a21}
. . .
3
0
0
ORG 0
SAL INI
M:
ESP 1
N:
ESP 1
MAT: ESP 100
DCM: DRE MAT
PUN: ESP 1
J:
ESP 1
K:
ESP 1
UNO: CTE 1
INI: LEE M
LEE N
CAR UNO
ALM K
BFIL: CAR UNO
ALM J
BCOL: CAR K
RES UNO
MUL N
SUM J
RES UNO
SUM DCM
ALM PUN
LEEI PUN
CAR J
SUM UNO
ALM J
RES N
SAN BCOL
SAC BCOL
CAR K
SUM UNO
ALM K
RES M
SAN BFIL
SAC BFIL
ALT
FIN
Cálculo de la matriz transpuesta de una matriz dada En este apartado se propone que modifique el algoritmo y el programa anterior añadiéndole las sentencias necesarias para que además de la lectura de la matriz calcule y escriba en pantalla la matriz transpuesta B de la A, es decir B=AT. Traduzca y ejecute el programa comprobando el correcto funcionamiento. NOTA: Se necesitará reservar espacio para ambas matrices A y B, con sus correspondientes direcciones de comienzo en la memoria y punteros. El código ASCII en decimal del carácter espacio es el 32 y del cambio de línea es el 10. Práctica 0. Curso 2015/16 6
Descargar