Sie sind auf Seite 1von 4

Informe 1: Introducción al lenguaje

ensamblador
Juan Pablo Castro.
Facultad de Ingeniería Universidad del Valle
Email: juan.castro.vasquez@correounivalle.edu.co
ofrecen un entorno de programación menos
peligroso y mejor que una máquina real porque
Resumen- Este trabajo presenta la práctica con el pueden detectar errores, ofrecer más posibilidades
lenguaje ensamblador MIPS, por medio del simulador que un ordenador real y no modifican elementos
Simula3MS, el cual es un simulador de procesos que físicos del computador.
permite ingresar una serie de instrucciones MIPS y
con una interfaz muy interactiva, con el objetivo de
analizar las operaciones realizadas vistas en las El informe se organiza de la siguiente forma: en la
clases de Arquitectura de Computadores II. Las parte II se encuentra el cuestionario con los
actividades realizadas han sido tomadas de la página resultados con el simulador Simula3MS. Dicho
Web del Grupo de Arquitectura de Computadores de cuestionario consta de 8 literales que responden a las
la Universidad de la Coruña, España. Palabras Clave- preguntas planteadas en la guía número 1:
Simula3MS, ensamblador, MIPS. Simula3ms_Guia_1.pdf.

II. CUESTIONARIO Cargar y ejecutar el siguiente


I. INTRODUCCIÓN . código para responder las preguntas propuestas:

Introducción ( Tomado de
http://simula3ms.des.udc.es/) A. Explicar lo que hace el código
Después de ejecutar el código en el editor del
“Simula3MS es un proyecto del grupo de Arquitectura simulador se obtienen los siguientes registros y
de Computadores de la Universidad de la Coruña. El operaciones del programa:
proyecto abarca la implementación de un simulador de
una arquitectura básica en sus versiones monociclo,
multiciclo y segmentado, que se pretende usar en las Segmento de texto para identificar
prácticas de las asignaturas de Estructura de instrucciones a ejecutar.
Computadores. Actualmente cuenta con tres opciones de
simulación diferentes: entrada/salida, técnicas de salto y
camino de datos. Esta última opción permite escoger entre
diferentes configuraciones del camino de datos:
monociclo, multiciclo, segmentado básico, Marcador y
algoritmo de Tomasulo.

Figura 1. Segmento de texto del programa

1. Carga en $t0 la dirección de numA.

Los simuladores de los procesadores son la $t0, numA Carga en $t0 la dirección de memoria de la
ampliamente utilizados en docencia debido a que constante numA.
add realiza la suma de los dos parámetros $t2 y
Se divide en: $t3. Para este momento, $a0 tendrá el valor 9 (la
- lui (16 bits de mayor peso de la dirección): suma de $t2 y $t3).
lui $t0, 0x1001 carga 0x1001 en los 16 bits más
significativos de $t0.
5. Almacena en la dirección [0x0040001c] el
- ori (16 bits de menor peso de la dirección): contenido de $a0.
ori $t0, $t0, 0x0000, $t0 queda con el resultado de $t0
OR 0x0000. sw en este caso toma la dirección del registro
temporal $t0 (0x00400010), le suma el
2. Carga en $t1 la dirección de numB. desplazamiento (0) y almacena en la posición
resultado de la suma (dirección $t0 +
Las carga de la dirección numB en $t1 tiene el mismo desplazamiento), la palabra que contiene la variable
flujo que el paso anterior, cambian las direcciones de $a0.
memoria.

6. Se almacena en $v0 la suma de $0 y 10

Se realiza la operación addi $v0, $0, 10, la cual


almacena en el registro $v0, la suma del registro $0
y el valor de la constante 10, teniendo como
resultado $v0 = 0000000a, que es valor de la suma
expresada en hexadecimal.
Figura 2. las direcciones numB y numA han sido cargadas
en t1 y t0 respectivamente.

Finalmente se realiza la llamada al sistema con la


3. Carga en $t2 y $t3 las palabras en la dirección instrucción syscall. Que en este caso indicaría la
almacenada en $t0 y $t1 respectivamente. finalización de ejecución del programa.

lw carga en la variable especificada, la palabra que está


en la dirección de memoria pasada, en este caso $t0 y $t1
respectivamente.

Nótese en la Figura 3 que la nueva dirección calculada


debe ser múltiplo de 4.

Figura 3. Las nuevas direcciones calculadas serán


0x00400014 y 0x00400018, 16 y 20 respectivamente.

4. Almacena en $a0 la suma de las palabras B. Utilizando la siguiente tabla indica en la segunda
en $t2 y $t3. columna el valor de los registros implicados en la
instrucción en curso después de que esta se haya
ejecutado. En la tercera columna explica brevemente
lo que hace la instrucción

Tabla 1: análisis de instrucciones E. ¿Qué queda almacenado en el registro $a0


al final de la ejecución? Indícalo en hexadecimal,
binario y decimal
Código Contenido Finalidad

lw $t2, $t0 = 10010000, Carga en $t2 la Al finalizar la ejecución en el registro de


0($t0) $t2 = 00000003, palabra almacenada argumento $a0 ha quedado almacenado $a0 =
desp = 0 en la dirección 00000009
contenida en $t0 más
el desplazamiento. Hex: 9
add $a0, $t2=00000003, Almacenar en $a0 el Bin: 1001
$t2, $t3 $t3=00000006, valor de $t2+ $t3. Dec: 9
$a0=0000009

F. ¿Cuál es la dirección en memoria de la


instrucción add?
C. ¿Cuál es la finalidad de la instrucción syscall?

La dirección en memoria de la instrucción add,


Syscall es una llamada del programa ejecutado al
según el PC del simulador, es: 0x00400018.
sistema operativo, para pedir un servicio. El programa que
invoca syscall carga el código de llamada al sistema en
G. ¿Cuál es la dirección en memoria del
el registro $v0 y los argumentos en los registros $a0 y
número 6 (numB)?
$a1.

La dirección de memoria de la constante numB se


Simula3MS ofrece un pequeño conjunto de servicios
guarda en el registro $t1 cuya dirección de memoria
de llamada al sistema operativo a través de la instrucción
0x10010000.
de llamada al sistema ( syscall ).

H. Si quisiera imprimir este número por


Existen llamadas al sistema para salida de datos
pantalla, ¿Qué instrucciones necesitaría añadir y
(print_int, print_oat, print_double, print_string). También
dónde? Hazlo y pruébalo.
hay llamadas al sistema para entrada de datos, estos
datos se solicitan al usuario a través de diálogos (read_int,
Debería añadir las instrucciones:
read_oat, read_double, read_string). Estos datos son
reservados por el programa durante su ejecución y por
lw $a0, 0($t1)
tanto se consideran datos dinámicos.
li $v0, 1
Otra llamada al sistema muy utilizada es exit utilizada
antes de hacer el llamado al sistema syscall.
para indicar al procesador que se ha terminado la
ejecución del programa.
lw $a0, 0($t1): carga la palabra que está en $t1 al
que será el argumento de print_int, es decir, $a0.
Así, $a0 tendrá el valor 6.

li $v0, 1: el programa carga en $v0 el código del


servicio syscall a usar.

El código 1 indica el servicio print_int. Cuyo


D. ¿Cuántos ciclos tarda en ejecutarse el
parámetro es $a0 e imprime un entero en un diálogo de
programa anterior?
información.
El programa anterior cuenta con 10 ciclos para
lograr su ejecución completa
Se puede visualizar que, con la instrucción
lw, se ha cargado el valor requerido en $a0.

Figura 4. Resultado en pantalla de la llamada al servicio


print_int.