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.
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.