Práctica 1 (Tema 2)

Resumen

En la primera practica tendréis que aplicar lo aprendido en el tema 2 de teoría, las instrucciones y la forma de programar en procesadores MIPS, en un programa, llamado MARS.

 

A la derecha teneis los valores de los Registros, debajo 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:
 
Debajo 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.

Trabajo realizado por Oscar Jimenez Rubio




FAQ


1ª) ¿Todos los registros son preservados en llamada?

NO, los registros preservados durante una llamada son aquellos que (por convenio) no serán modificados por una llamada de sistema o a un procedimiento o función, por esta razón algunos si están preservados y otros no.
Como vemos en la siguiente tabla algunos registros son preservados y otros no; para mayor ampliación de información en dicha tabla también aparecen el nombre, número, y uso de los registros que citan.

Registros

Nombre
Número
Uso
Preservado en llamada
$zero
$0
constante entera 0
$at
$1
temporal del ensamblador
no
$v0–$v1
$2–$3
Valores de retorno de funciones y evaluación de expresiones
no
$a0–$a3
$4–$7
Argumentos de funciones
no
$t0–$t7
$8–$15
Temporales
no
$s0–$s7
$16–$23
Temporales salvados
$t8–$t9
$24–$25
Temporales
no
$k0–$k1
$26–$27
Reservados para el núcleo del SO
no
$gp
$28
puntero global
$sp
$29
puntero de pila
$fp
$30
puntero de "frame"
$ra
$31
$31
no



2ª) ¿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.

3ª) Explica brevemente que es lo que hace el siguiente codigo:

glob main
li $a 0,número 1
li $a 1,número 2
ADD $a 2, $a 1, $a 0

Sw $a 2, Resultado

En primer lugar guarda en registro el primer número que es 100, después guarda el segundo número que es -10
A continucación suma los dos registros $a 1 y $a 0, en el nuevo registro $a 2.
Finalmente almacena el resultado final que es 90.

4ª) El mapa de memoria de MIPS está dividido en varias zonas o segmentos. De los 4 GB disponibles de memoria, sólo 2 GB están disponible para los programas del usuario. El resto sirve al sistema operativo y para la memoria virtual. ¿La zona del usuario se subdivide en más segmentos?

SI, la zona del usuario se subdivide a su vez en:
– Segmento de texto, donde se almacena el programa.
– Segmento para datos estáticos, que almacenan datos necesarios definidos en tiempo de compilación del programa.
 – Segmento para datos dinámicos, es decir, que se definen sobre la marcha durante la ejecución del programa.

5º)HOLA MUNDO

.data
texto: .ascii "Hola mundo"
.text
.globl main
main:
la $a0,texto
li $v0,4
syscall


Trabajo realizado por Alejandro Jesús Martínez Atienza

No hay comentarios:

Publicar un comentario