sábado, 12 de enero de 2013

Práctica 5


Grado en Ingeniería Informática                              
Arquitectura de Computadores – Prácticas Curso 2012-13   

Ensamblador del procesador MIPS

                                    Simula3MS   
  
El desarrollo de esta práctica se basa en la programación en ensamblador del procesador MIPS. Para programar en este lenguaje usaremos el programa SIMULA3M. Disponible en: http://simula3ms.des.udc.es/

El manual usado para entender el simulador está disponible en el siguiente enlace.
https://docs.google.com/open?id=0B_QYUG73pxy8ekFxWTFOTnlIZzQ


Los ejercicios propuestos para esta práctica son los siguientes:

Ejercicios 1-4

Los ejercicios propuestos del 1 al 4 se resumen como:
-          Ejercicio 1: Entender el entorno y hacer uso del manual
-          Ejercicio 2: Escribir el programa de ejemplo siguiente.




-          Ejercicio 3: Ensamblar y comprobar posibles errores en el código.
-          Ejercicio 4: Repasar sintaxis si existen errores. En caso contrario ejecutar para iniciar el proceso de simulación de ejecución.
Observamos que al ensamblar el código no existen errores, por lo que pasamos a la ejecución.

Ejercicio 5

En este ejercicio pide ejecutar el programa anterior paso a paso haciendo uso del botón de “Ciclo Siguiente”.
Observamos que para cada tipo de instrucción se muestra el camino de datos de un color distinto.



Los registros pedidos en el ejercicio y su contenido son:

$t0: 10010000                        $s0: 00000064
$t1: 10010004             $s1: fffffff6
$t2: 10010008                        $s2: 0000005a

Los datos de la memoria de datos son los siguientes:

Dirección 0x10010000: 0x00000064
Dirección 0x10010004: 0xfffffff6
Dirección 0x10010008: 0x0000005a

Ejercicio 6

Este ejercicio pide escribir el código siguiente usando el editor, ensamblarlo y ejecutarlo. Y posteriormente explicarlo.




Inicialmente en este programa se carga un vector de 4 elementos, donde cada elemento es un número decimales ya definido. En el cuerpo del programa se carga la dirección de memoria del vector en la variable $t1. Luego, las 4 siguientes instrucciones cargan de la memoria de datos el valor de cada posición del vector a partir de $t1 y el desplazamiento en las variables $s0, $s1, $s2 y $s3.

El contenido del segmento de datos de memoria al inicio de la ejecución es el siguiente:





0x10010000: 0x000000d2
0x10010004: 0x000000f0
0x10010008: 0x0000014a
0x1001000c: 0x00001608

Observamos los siguientes valores:

-          Contenido del registro t1 antes de la ejecución:        t1: 0x00000000
-          Valor del registro PC antes de la ejecución:              PC: 00400000
-          Contenido del registro t1 después de la ejecución:    t1: 10010000




-          Contenido de los registros siguientes al término de la ejecución:
s0: 000000d2
s1: 000000f0
s2: 0000014a 

-          Valor del registro PC al término de la ejecución:       PC: 00400018

Ejercicio 7

Este ejercicio pide que se escriba el siguiente código usando el editor de Simula3MS, ensamble, ejecute y compruebe el resultado.

Código:
.data
.text
.globl main

main:
li $a0,0x0000000F
li $v0,0x00000001          # La llamada asociada con imprimir por pantalla
# un entero es la 1
syscall                    # Efectúa la llamada y muestra por pantalla
# el decimal 15

li $v0,0x0000000A          # La llamada que indica al procesador que
# se terminado la ejecución es EXIT,
# de código 10 decimal
syscall                    # Efectúa la llamada


Debemos saber que para pedir un servicio hay que cargar el código de la llamada deseada en el registro de MIPS denominado $v0 y los argumentos que se van a mostrar o leer en los registros $a0 ó $a1. Una vez establecidos estos valores se procederá a efectuar la llamada con syscall.

Tras ensamblar y ejecutar el código observamos que el resultado mostrado es 15.

Ejercicio 8

Este ejercicio se pide la realización de un programa que solicita por teclado tres valores enteros y los almacena en memoria en un vector llamado “vector” para el que previamente se habrán reservado cuatro palabras de memoria, tres para los enteros introducidos y un cuarto para guardar el resultado final. Luego se completa el programa efectuando la suma de los elementos del vector construido y se muestra por pantalla.

El programa es el siguiente:

.data
vector:      .word 0,0,0,0

.text
.globl main
main:

#Insercción de números
la $t1,vector       # Apunta a la dirección del 1º elemento de

li $v0,5
syscall
sw $v0,0($t1)

li $v0,5
syscall
sw $v0,4($t1)

li $v0,5
syscall
sw $v0,8($t1)

#Cargar elementos del vector para sumarlos
lw $s0,0($t1)       # Carga el 1º elemento del vector en s0
lw $s1,4($t1)       # Carga el 2º elemento del vector en s1
lw $s2,8($t1)       # Carga el 3º elemento del vector en s2

add $t0,$s0,$s1     # Suma elementos 1 y 2 
add $t0,$t0,$s2     # Suma el resultado del anterior y elemento 3
sw $t0,12($t1)      # Almacena el resultado de la suma en la última posición del vector

lw $a0, 12($t1)     # Carga el resultado
li $v0, 1           # Muestra por pantalla
syscall

No hay comentarios:

Publicar un comentario