Práctica 1

Práctica 1: Introducción a MARS

En esta práctica se utiliza el programa MARS para programar sobre un código ya dado anteriormente mediante el cual aprenderemos el funcionamiento básico del simulador.

En primer lugar se ofrece una introducción al entorno del programa:

  • Interfaz del programa:




  • Barra de instrucciones:



  • Ejemplo de código (Programa Fibonacci):





El programa ya dado realiza la serie de Fibonacci y escribe los 20 primeros términos de la serie y, como ejercicio final, nos pide modificar el programa para calcular la secuencia con los 3 valores previos en vez de 2.
Pero antes de eso se trabajará el programa para su comprensión.

Abrimos el archivo fibonacci.asm con el MARS desde File > Open y lo ensamblamos.

Buscamos en los ajustes del MARS, en la pestaña de Settings, marcamos la opción de ‘’show labels window’’ para ver las etiquetas y la casilla de permitir pseudo-instrucciones.

En la barra de velocidad, la asignamos a 10 Instrucciones/segundo para ver cómo funciona el programa.

Ejecutamos el programa.

En la ventada de salida (Run I/O) podemos ver esto:



 Indica que el programa funciona ya que muestra los valores correctos de la serie de Fibonacci.
Tras comprobar los resultados, vamos a establecer un punto de interrupción donde empieza a imprimir los resultados.






Al iniciar el programa, se parará en ese punto, y desde ahí podemos por ejemplo cambiar los valores haciendo doble click en las posiciones de memoria, para que podamos meter los números por teclado.
Al darle a continuar el programa, empezara a imprimir los valores que le hemos dado.

A continuación, nos piden cambiar el programa para que antes de iniciarse, nos pidan cuantos valores de la serie queremos imprimir en pantalla.

Para ello, realizaremos estos cambios en el programa:

Eliminar las # de las líneas 12 a la 19 para habilitar esa parte de código.




En el nuevo fragmento de programa, en la línea 15, hay una llamada al sistema donde hay una incógnita. Para resolver el problema, tenemos que acceder a la syscall tab que se encuentra en la ayuda.




Para este caso necesitamos la rutina 5 ‘’read integrer’’ y la línea quedaría así.

Con este nuevo programa nos preguntará antes cuantos valores de la serie queremos imprimir en el programa.





 Como último ejercicio, se nos propone cambiar el programa para que realice la seria de fibonacci con 3 elementos.

Para realizar este ejercicio, se ha de realizar las siguientes instrucciones:

Vamos al código.

Para que se cumpla el programa, los 3 primeros términos han de ser 1, en el programa ya viene dado que los 2 primeros términos sean 1, bajo el código: sw $s2, 4($s0).

Vamos a crear un código justo después de este para hacer que el tercer termino también sea 1, en la línea 23 que hemos creado y ahora esta en blanco, colocamos el código: sw $s2, 8($s0).

Entre la s líneas 29 y 30 colocamos el código: lw $s6, 8($s0), de este modo cargaremos el valor de f3 para luego meterlo en la suma.

En el simulador MARS a la hora de hacer cálculos, hay que hacerlo uno a uno, no se puede hacer por ejemplo 2 sumas en la misma línea, por eso, entre las líneas 31 y 32, vamos a colocar el código para que haga la segunda suma necesaria para la nueva serie. Para ello en la nueva línea 32 se pondrá el código add $s7, $s6, $s2 para que el bucle haga la suma de f1+f2+f3.

Por último, en la fila 33, tenemos que cambiar la línea, para que el valor de la suma lo guarde en fn y no en f1 donde se guardaba antes, para ello lo cambiamos por sw $s7, 12($s0).



FAQs DE LA PRÁCTICA Nº1


1º) ¿Qué programa es el Mars?
MARS (MIPS ensamblador y simulador de tiempo de ejecución) es un Entorno Interactivo de Desarrollo ligero (IDE) para programación en lenguaje ensamblador MIPS, destinados a uso educativo.

2º) ¿Cómo puedo añadir comentarios en el MARS?
Para añadir un comentario se utiliza el símbolo “#” y luego se añade el comentario.

Ejemplo:

         #Ejemplo de comentario.
 
3º) ¿Cómo se pueden almacenar vectores o arrays en los registros?
Los vectores son elementos que no pueden guardarse en los registros, así siempre serán guardados en memoria. Lo que si puede almacenarse en los registros es la dirección del primer elemento del vector y a continuación será posible acceder al resto de elementos usando el modo de direccionamiento relativo a registro base.
 
4º) ¿Cómo se realiza una llamada al sistema para que muestre resultados por pantalla?
En el caso de MIPs, habrá que indicar donde se encuentra el valor a imprimir, p.e. el elemento 0 de array_byte, sito en s0 tras ejecutar los códigos anteriores, y a continuación guardar en v0 el valor numérico asociado a la llamada deseada, 1 para la impresión de un entero por pantalla y añadiendo las siguientes líneas al código anterior, se visualizará el primer elemento del array_byte en pantalla:

move $a0,$s0        # Mueve el contenido del registro s0, primer elemento, al registro $a0
li $v0,0x00000001   # La llamada asociada con imprimir por pantalla un entero es la 1
syscall             # Efectúa la llamada
 
5º) ¿Qué relación hay con el incremento de la dirección de cada elemento del array? y ¿qué instrucción permite acceder a cada byte de una palabra de memoria?
El incremento de la dirección de cada elemento del array se produce según múltiplos de 1, 2 o 4 para bytes, media palabra y palabras respectivamente.
Existe una instrucción similar a “lw” que permite acceder a cada byte de una palabra de memoria y es “lb”.

1 comentario:

  1. Hola, con "la serie de fibonacci con 3 elementos" a que te refieres, ¿0,1,1,2,4,7,13...?

    ResponderEliminar