miércoles, 9 de enero de 2013

Práctica 5: Ensamblador del procesador MIPS e introducción al simulador Simula3M


Introducción
En el objetivo de esta práctica es comprender el funcionamiento de un instrucción a instrucción en un procesador MIPS.

Para el desarrollo de la práctica se ha utilizado el entorno de simulación Simula3MS.
Simula3MS es un proyecto del grupo de Arquitectura de Computadores de la Universidad de A Coruña,  es un simulador orientado al estudio de las asignaturas que tratan la arquitectura y organización del computador, que implementa un subconjunto de instrucciones basadas en el repertorio de instrucciones del procesador MIPS R2000/R3000 . Cuenta con un entorno de trabajo gráfico y de fácil manejo que permite depurar cómodamente los programas, observar la evolución de la memoria, así como la ejecución de las instrucciones sobre distintos caminos de datos. La presencia de las distintas implementaciones en la misma herramienta permite observar las diferencias de ejecución de un mismo código según cuales sean las características del procesador. 


Desarrollo 
Es necesario realizar una lectura del manual adjunto a la práctica, para el correcto desarrollo de la misma.
En primer lugar, se escribe el programa que se muestra en la figura.


Se guarda el fichero y se pulsa el botón ensamblar.



A continuación si en la zona de errores no aparece ninguno, se procede a la ejecución del código.


Ahora se va haciendo uso del botón "Ciclo siguiente", se indicara en azul la instrucción que esta en 
ejecución.


 Los cambios tras la ejecución son los siguientes:

Registros:

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

Memo datos:

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

En segundo lugar, se escribe el siguiente código, ejecuta.


Explicación del código:
En primer lugar se guarda la dirección de array_word en t1, a continuación se van guardando los valores que contiene el vector en s0, s1, s2 y s3; para ello en cada instrucción tiene un desplazamiento múltiplo de 4.

Contenido del segmento de datos de memoria al inicio de la ejecución:
0x10010000: 0x000000d2
0x10010004: 0x000000f0
0x10010008: 0x0000014a
0x1001000c: 0x00001608

Contenido del registro t1 antes de la ejecución:
t1; 00000000

Valor del registro PC antes de la ejecución:
PC: 00400000

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 

En tercer lugar, se escribe el siguiente código que incluye llamadas al sistema.

En este programa se asocia una llamada para imprimir por pantalla, de valor decimal 1, esta  muestra el decimal 15 (0000000F) al realizar la llamada (syscall). Y al final la llamada indica al procesador que se termina es EXIT con valor decimal 10.

Por ultimo, se construye un programa que solicite por teclado tres valores enteros y los almacene en un vector, este vector tendrá cuatro palabras de memoria. tres para los enteros y una para el resultado de la suma de estos.

.data
vector: .space 16   #Reserva de memoria para 4 enteros

.text
.globl main
main:

la $t0,vector       # Cargar en registro $t0, en el vector

li $v0,5            # Establece una llamada para que un entero sea almacenado en v0
syscall
sll $s0,$v0,0       # Almacena el valor de v0 en a $s0

li $v0,5                         
syscall
sll $s1,$v0,0       # Almacena el valor de v0 en a $s1                         
                          
li $v0,5                         
syscall
sll $s2,$v0,0       # Almacena el valor de v0 en a $s2
                          
add $t1,$s0,$s1     # t1 = s0 + s1
add $t1,$t1,$s2     # t1 = t1 + s2
      
sw $s0,0($t0)       # Guardar en memoria los valores leidos
sw $s1,4($t0)
sw $s2,8($t0)

sw $t1, 12($t0)     # Guardar en memoria el resultado de la suma

sll $a0, $t1,0      # Almacena el valor de ta en a $a0
li $v0, 1                                            
syscall             # Lo muestra por pantalla

li $v0,10           # Llamada que indica al procesador que se ha terminado la ejecución







No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.