Practica 1: Programacion en procesadores MIPS
En vuestra primera practica tendréis que sacar a relucir lo aprendido en el tema 2 de teoría, las instrucciones y la forma de programar en procesadores MIPS. Realizareis la practica en un programa, llamado MARS.
A la derecha teneis los valores de los Registros,abajo si estais en la pestaña “Mars Messages” veréis mensajes relativos al ensamblamiento del programa y errores en el mismo, si en cambio estais en la pestaña Run I/O entonces veréis lo que hace exactamente vuestro programa, es decir,su ejecución en tiempo real.En el centro esta la pantalla donde tendréis que escribir código.
Para la practica tendréis un archivo PDF con los ejercicios propuestos de la practica y código ejemplo. Esto es muy importante, ya que muchos ejercicios piden solo modificar el código ejemplo para que haga determinadas cosas.
Ire explicando mientras que ejecuto el primer código ejemplo de la practica:
.data
array_byte: .byte 60,61,62,63
array_media: .half 10,20,30,40
array_palabra: .word -1,-2,-3,-4
.text
main:
la $t1,array_byte #Apunta a la dirección del 1º elemento de array_byte
lb $s0,0($t1) # Carga el 1º elemento del vector en s0
lb $s1,1($t1) # Carga el 2º elemento del vector en s1
lb $s2,2($t1) # Carga el 3º elemento del vector en s2
lb $s3,3($t1) # Carga el 4º elemento del vector en s3
El código lo que hace es cargar los elementos de un vector en los registros,ya que no se puede almacenar directamente un vector en los registros. Veamos como ensamblarlo en MARS.
Le damos al botón de “Archivo Nuevo” que viene representado, como en todos los programas, por un folio en blanco, y escribimos el código. Quedaria algo asi:
Como podeis ver, en el código los comentarios aparecen en verde, las instrucciones en azul, las directivas en rosa y los registros en rojo.
Ahora tendríamos que darle al botón de ensamblar, representado por una llave inglesa y un destornillador cruzados, pero el botón no esta resaltado. ¿Por qué? Pues porque el archivo de código que hemos creado no esta guardado. Tened cuidado con esto, podeis llevaros bastante tiempo sin saber porque no os deja ensamblar y es por esta tontería. Dadle al botón guardar y guardad el archivo donde queráis.
Ahora el botón de ensamblar si esta resaltado. Dadle. El programa cambiara de pantalla y os mostrara esto:
Ahora el programa os muestra las instrucciones codificadas y esta preparado para ejecutarse. Dadle al botón Play para ejecutarlo. Tendreis esta ventana:
Abajo en donde se muestran los mensajes MARS dice que ha terminado de ejecutar el programa. Si os ha funcionado bien, a la izquierda podréis ver que los registros que menciona el programa han cambiado de estar a 0 a los valores que llevaban las posiciones del vector correspondientes. Asi se termina una practica, recordad que casi todas consisten en cambiar algo de un código ejemplo.
MARS funciona asi sea cual sea el código que metas, asi que siguiendo estos pasos no deberíais tener problemas para manejar el programa con soltura y completar bien las practicas.
Preguntas Práctica 1:
1) ¿Porque en algunas instrucciones MIPS, tales como SLL, requieren la codificación del registro RS, cuando no tiene ese parámetro?
En ese caso, cuando no se carece de un parámetro , se rellena de 0 ese bloque, quedando de esta manera:
Ejemplo: SLL rd,rs,desp: SLL $t0,$t1,0x01
0 Rs Rt Rd Desp 0
000000 00000 01000 01010 00001 000000
0 0 0 8 5 0 4 0
0x00085040
2)¿Como instalar el simulador MARS en sistemas GNU/Linux?
El paquete para Linux esta distribuido en formato .jar, donde contiene las fuentes escritas en java, lo que por otra parte necesita tener instalado alguna version reciente de java para ejecutarse. Para lo cual tendras que verificar o instalar segun el caso la maquina virtual java, para el caso de Debian y Ubuntu, solo tendras que escribir el siguiente comando:
sudo apt-get install openjdk-6-jre
Para otras distribución en lugar de poner apt-get install lo sustituyes por el correspondiente sistema de gestión de paquetes.
El siguente paso seria descargar MARS de la siguiente web:
http://courses.missouristate.edu/KenVollmar/Mars/download.htm
Para abrirlo simplemente en las propiedades, pulsando el botón derecho y posteriormente propiedades, en la pestaña de permisos tienes que darle a de ejecución,y en la pestaña de abrir con, asegurarte que esta en sun java.
3) ¿Que son, para que sirven y como utilizo las llamadas al sistemas a la hora de programar en MIPS?
Las llamadas al sistema en la programacion MIPS es un recurso del que dispone el programador para indicarle al sistema que tiene que realizar una operación de entrada o salida, o bien tiene que realizar alguna tarea como cerrar el programa.
Para utilizar este recurso, previamente a la llamada al sistema, en el registro $v0 tienes que cargar el numero de la instrucción:
Ejemplo, escribir un entero
li $v0,0x00000001
syscall
Ejemplo, leer entero:
li $v0,0x00000005
syscall
Ejemplo, llamada a Exit
li $v0,0x0000000A
syscall
Posteriormente en el registro $a0 se realiza la operacion de entrada y salida.
4)¿ Cómo se representa los números en el simulador MARS?
Los números en el simulador MARS se representan en Hexadecimal y siempre se pone delante un ``0x´´ al principio del número para señalar que está escrito en hexadecimal , teniendo 8 bits para colocar el número o incluso podemos señalarlo , poniéndo una ``h´´ al final del número.
Por ejemplo: 17775198 ( Decimal ) -> 0x010f3a5e ó 10f3a5e h
5) ¿ Qué son los códigos nemónicos?
Un nemónico es un dato simbólico que identifica a un comando generalmente numérico (binario, octal, hexadecimal) de una forma más sencilla que su numeración original, lo cuál facilita radicalmente la memorización de este comando para el programador.
Por ejemplo:
add -> Suma
lw -> Carga un dato de memoria
Estos códigos nemónicos se emplean para representar instrucciones para el lenguaje ensamblador .





No hay comentarios:
Publicar un comentario