








Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: estructuras de computadores, Profesor: Jose Jose, Carrera: Ingeniería Informática + Administración y Dirección de Empresas, Universidad: URJC
Tipo: Ejercicios
1 / 14
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!









1. Objetivos
En esta práctica vamos a utilizar el simulador MARS para escribir un programa en ensamblador MIPS (ver el apéndice para un sencillo tutorial sobre MARS). En concreto el programa va a leer un fichero de texto y va a hacer un cifrado mediante sustitución de caracteres. Para ello utilizará una clave donde para cada carácter se especifica cuál es el carácter por el cual se deberá sustituir. Adicionalmente, el programa descifrará el texto previamente cifrado y comprobará que recupera el mensaje original.
2. Especificaciones
Reservaremos un máximo de 1000 bytes para almacenar el texto (incluido el byte de final de cadena). El texto estará en formato ASCII en un fichero externo (no vale en formato Word u otro programa, así que tendréis que modificarlo con el bloc de notas u otro editor similar), que deberá estar situado en la misma carpeta que el fichero Mars.jar (en caso contrario, habrá que especificar la ruta hasta llegar a él). Por simplicidad, el texto se compondrá exclusivamente de letras mayúsculas, se habrán eliminado todas las tildes y diéresis, las Ñ se habrán sustituido por N. Se permitirán espacios en blanco, números y signos de puntuación.
Análogamente reservaremos un máximo de 1000 bytes para almacenar el texto cifrado y otros 1000 bytes para almacenar el texto recuperado al descifrar el texto cifrado.
La clave se almacenará en un array de 26 bytes. El primer byte almacenará el carácter por el que se deberá sustituir la “A”, el segundo byte almacenará el carácter por el que se deberá sustituir la “B”, y así sucesivamente para las 26 letras del abecedario. Se deberán implementar las siguientes funcionalidades:
El resultado del cifrado se almacenará en el vector etiquetado como textocifrado. Tendrá el mismo tamaño que el texto original y deberá finalizar con un carácter nulo.
Tabla de códigos ASCII. La “A” es 0x41 y la “Z” es 0x5A.
3. Subrutinas
A continuación se explican las subrutinas que vienen implementadas en el código que se distribuye con la práctica, a partir del cual tendréis que programar las funcionalidades que se os piden en este enunciado.
Esta subrutina se encarga de abrir un canal de comunicación entre el simulador MARS y el fichero que contiene el texto (pero no lee su contenido). Para ello se encargará primero de preguntar al usuario el nombre del fichero que queremos abrir. Recordemos que esto significa primero mostrar una cadena de texto con un mensaje y después requerir al usuario que introduzca una cadena de texto por teclado (aquí hay dos servicios implicados). La apertura del fichero con ese nombre indicado se realiza mediante el servicio 13. Consultad la ayuda para más detalles sobre este servicio.
Precaución: el servicio 8 de lectura de cadena por teclado termina la cadena leída con el byte 0x0A (carácter “nueva línea”). Hay que sustituir este byte por el byte nulo para poder luego leer el fichero, ya que de lo contrario el servicio 13 no encontrará el fichero y dará error.
Como resultado, esta subrutina devolverá un código numérico de 4 bytes que identificará al fichero recién abierto. En caso de que el código sea un número negativo, significará que ha ocurrido un error y así lo deberá hacer constar el programa, abortando su ejecución.
Sus parámetros son:
Esta subrutina se encarga de leer el fichero, una vez que éste ha sido abierto correctamente.
Precaución: el servicio 14 de lectura de fichero no coloca el byte nulo de fin de cadena después del último byte leído. Hay que hacerlo a mano para posteriormente poder encontrar el final del texto.
En caso de que se produzca un error en la lectura del fichero, la subrutina deberá indicarlo en su correspondiente parámetro de salida y la ejecución del programa quedará abortada.
Sus parámetros son:
4. Entrega de la práctica
La práctica se realizará en grupos de 2 personas y su entrega se realizará a través del campus virtual dentro de la fecha establecida por el profesor. El material se encontrará también en el campus virtual y se compone de este enunciado junto con un código fuente básico del cual partirán los alumnos y completarán adecuadamente.
Será necesario entregar:
Será imprescindible añadir comentarios a todas las líneas de código ensamblador, ya que éstas suelen ser más difícil de comprender, no sólo para una tercera persona, sino también para su propio autor pasado un tiempo. Para ello podéis usar las almohadillas (#).
Además puede resultar de ayuda dibujar un diagrama de flujo esquemático para cada subrutina y para el programa principal, que permita representar de manera clara y concisa la estructura del programa. Se recomienda usar la siguiente notación:
Apéndice. Guía de uso e instalación del simulador de
MIPS Mars
A.1. Descargar e instalar el programa
El programa MARS es un entorno de desarrollo y simulación interactivo para poder programar en ensamblador para MIPS, orientado al uso a nivel educativo en concordancia con el libro “Computer Organization and Design,” de Patterson y Hennessy.
Es un programa gratuito, de código abierto y codificado en Java, por lo que debería funcionar correctamente en cualquier sistema que tenga instalado la última versión de la máquina virtual de Java. Para instalar la máquina virtual de Java, se puede descargar la última versión desde su página oficial: http://java.com/es/
El simulador MARS se puede descargar desde la web oficial de su autor, en la página de la universidad de Missouri:
http://courses.missouristate.edu/KenVollmar/MARS/download.htm
A fecha de agosto de 2013, la última versión disponible es la 4.4.
Descargaos el archivo Mars.jar, que es el ejecutable que contiene el simulador. Una vez instalada la máquina virtual de java, simplemente habrá que hacer doble clic en el archivo Mars.jar para iniciar el simulador. Se puede instalar en cualquier carpeta del equipo. Más sencillo imposible.
A.3. Creación de un nuevo archivo ensamblador
Para poder realizar una simulación, primero será necesario crear un archivo que contenga el código en ensamblador de nuestra aplicación. Para ello, podemos pinchar sobre el botón “New”, o bien seleccionar el menú “File” y la opción “New”:
Se abrirá una ventana del editor de texto, que nos permitirá escribir nuestro programa en ensamblador:
En caso de tengamos nuestro código ya creado, podemos cargarlo en el editor, pinchando sobre el botón “Open”, o bien seleccionamos el menú “File” y la opción “Open”:
Según vayamos avanzando en el programa, será necesario salvar nuestro código. Para ello, se pinchará sobre el botón “Save”, o “Save as” (buscad también en el menú “File”). La opción “Save” guarda el programa activo con el nombre que ya tiene (en caso de no haberlo grabado todavía, preguntará con qué nombre queremos guardarlo). Por otro lado, la opción “Save as” permite salvar el fichero con otro nombre distinto del que ya tiene.
A.4. Compilación y ensamblado
Una vez tenemos nuestro código escrito, será necesario ensamblarlo para más tarde realizar la ejecución y depuración del programa. Para ello, se pinchará sobre el icono “Assemble”, o bien seleccionar el menú “Run” opción “Assemble”.
Esto generará el código objeto en memoria, activando las ventanas de simulación. En caso de que nuestro código tuviera errores, se nos mostrarían a través de la ventana “Mars Messages”:
A.5. Ejecución del programa
Una vez hayamos ensamblado nuestro programa sin errores, podremos pasar a ejecutarlo. Para ello utilizaremos los botones “Go” y “Step”. El botón “Go” realizará la ejecución completa del programa, mientras que el botón “Step” permitirá ir instrucción a instrucción en la ejecución del programa, lo cual nos permitirá apreciar los cambios en los registros y la memoria que va realizando cada una de las instrucciones:
Si elegimos el botón “Step”, se nos irá iluminando en la ventana “Text Segment” la próxima instrucción que se ejecutará. Además, podremos ver la actualización de los registros en memoria que se estarán modificando. Para ello, tendremos que consultar la ventana “Registers”:
Si nuestro programa necesita escribir algún mensaje o mostrar algún dato, se podrá visualizar en la ventana “Run/IO”. Esta ventana servirá también para poder leer datos que se pidan al usuario:
Además, en caso de ser necesario, se podrán colocar puntos de ruptura o “breakpoints” en el código, para facilitar la depuración. Para ello, se podrá seleccionar la instrucción sobre la que se colocará el punto de ruptura en la ventana “Text Segment”, señalando la casilla en la columna “Bkpt”:
De esta forma, cuando pulsemos el botón “Go”, se parará la ejecución en ese punto, y se podrá continuar la simulación paso a paso. Una vez hemos acabado nuestra simulación, se puede resetear el estado de la CPU pulsando sobre el botón “Reset”, opción que también encontraremos en el menú “Run”:
Esto limpiará los registros, la memoria y devolverá la simulación a su estado inicial. También es posible volver atrás un paso, pulsando sobre el botón “BackStep”.
Para más información, consultad la ayuda del programa. Allí encontraréis un listado de todas las instrucciones, así como las pseudoinstrucciones y las directivas. Por último, los llamados “syscalls” os permitirán realizar operaciones de entrada/salida, como escribir en la consola o leer un dato del teclado, entre otras.