Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2° Cuatrimestre 2018
Facultad de
Informática
TP N° 3 - Pseudo-instrucciones, direccionamiento, instrucciones, registros
y organización de la memoria en MIPS
Objetivo: Comprender la diferencia entre las instrucciones de la máquina básica MIPS y la utilizada al
programar en lenguaje ensamblador MIPS (instrucciones y pseudo-instrucciones). Estudiar la codificación
de instrucciones, la utilidad de los registros, y la organización y gestión (básica) de memoria de los
programas en ejecución.
Recursos:
punte de Arquitectura y Lenguaje Ensamblador MIPS (PDF) (en PEDCO)
i) A
ii) MIPS32™ Architecture For Programmers Volume I: Introduction to the MIPS32™
Architecture (en PEDCO). Capítulos 2, 3 y 4.
iii) MIPS32™ Architecture For Programmers Volume II (en PEDCO)
iv) Programa mipsx desarrollado por la cátedra.
Ejercicios
1. El lenguaje ensamblador MIPS presenta varios formatos de direccionamiento(**) para las instrucciones
de carga y almacenamiento. En la siguiente tabla se listan los formatos posibles (su sintaxis):
.data
memoria:
vector: .word 3, 6, 9
(**) No confundir formato de direccionamiento con modos de direccionamiento. El formato de direccionamiento es la sintaxis
permitida por el ensamblador para direccionar un operando. En cambio, los modos de direccionamiento son los mecanismos
del hardware (CPU) para acceder a los operandos (especificados en las instrucciones código máquina)
total:.space 20
.text
.globl main
.globl __start
__start:
main:
li $t1, 4
li $t2, 0xffff1024
lw $t3, vector + 12
lw $t4, vector($t1)
lw $t1, 0x10010101($t3)
lw $t5, vector + 4($t1)
add $t6, $t1, $t1
sw $s3, total
lw $t0, ($t3)
# finaliza el programa
move $a0, $0
li $v0, 4001
syscall
2. ¿Cuál es el único modo de direccionamiento de la máquina básica MIPS (bare machine) para las
instrucciones de carga y almacenamiento?.
3.b. Analice detenidamente las instrucciones reales ejecutadas por la CPU MIPS (panel “Programa Binario
Decodificado”). Encuentre cuáles son las instrucciones de carga de valores en registros, y qué modos de
direccionamiento de la máquina básica se han utilizado.
4. Explique qué son las pseudo-instrucciones en el lenguaje ensamblador de MIPS, y para que se utilizan.
Analice, del programa estudiado con mipsx en el ejercicio anterior, cuáles instrucciones del programa
original son pseudo-instrucciones, y cuáles son instrucciones reales ejecutadas por el procesador para cada
pseudo-instrucción. Ayuda: utilice los paneles del programa original y del “Programa Binario
Decodificado”.
2. Organización de la memoria
Los programas en ejecución (procesos), son organizados o desplegados en segmentos de memoria de
diferentes tamaños y con distintas propiedades. Esta organización en segmentos de memoria de los
programas dependen fuertemente del compilador, sistema operativo y hardware subyacente para los
cuales fueron construidos. Además de esta organización de alto nivel, los datos individuales pueden ser
almacenados en la memoria utilizando diferentes tipos de organizaciones, que se distinguen por: el orden
de los bytes, y la restricción en la ubicación o alineación de los datos en memoria.
Ejercicio
(b) Las etiquetas (su sintaxis es nombre_etiqueta:) permiten referenciar datos o instrucciones sin
especificar direcciones. Indique las direcciones de memoria que el ensamblador de MIPS asignó a cada
etiqueta.
Algunas arquitecturas permiten configurar el orden de bytes, como por ejemplo la arquitectura MIPS. Así,
en MIPS, los datos con formatos half-word, word, y doubleword pueden configurarse tanto en orden
big-endian como little-endian.
Ejercicios
1. Escriba el valor 12.000 en un valor hexadecimal notación complemento a 2, tanto en orden big- endian
como little-endian (ejemplifique especificando direcciones de memoria para cada byte).
.data
memoria:
.word 0xabcd1234
.byte 2, 3, a, b
Agregue una sección de instrucciones para cargar los primeros 4 bytes del segmento de datos en 4
registros diferentes. Compilar, cargar y ejecutar. Compruebe si la máquina es big-endian o little-endian.
3. Se tiene dos máquinas MIPS, una configurada como big-endian y la segunda como little-endian.
Razone la siguiente definición: en una máquina big-endian, el byte MÁS significativo de una palabra es
ubicado en las dirección más baja. Por el contrario, en una máquina little-endian, el byte MENOS
significativo de una palabra es ubicado en la dirección más baja.
Describa cómo queda el contenido de la memoria, en ambas máquinas MIPS, cuando se ejecuta el
siguiente programa :
li $s1, 0xff04aa85
li $s3, 0xfe09bcaa
sw $s3, 0x0a000100
sw $s1, 0x0a000104
4. Imagine que ahora la máquina 1 envía a la máquina 2 los 8 bytes en memoria (a través de algún
mecanismo de red serial, es decir, cada byte es enviado de manera secuencial). La máquina 2 almacena
cada byte recibido en posiciones de memoria secuenciales, tal cual los recibe.
¿Qué inconvenientes puede tener el programador de la máquina 2 con los bytes recibidos y almacenados
en memoria de manera secuencial? Sugiera y razone posibles problemas y soluciones.
Ejercicio
1. ¿Los datos definidos en un programa y cargado en memoria de una máquina MIPS, se encuentran
alineados? Escriba un programa que reserve e inicialice memoria para datos, y que pueda validar su
respuesta anterior.
3. Registros
Un registro permite almacenar bits de información, normalmente utilizados para realizar operaciones
matemáticas. Los registros ubicados dentro de la unidad de procesamiento central (CPU) son llamados
registros del procesador. Ellos pueden ser accedidos más rápidamente que cualquier otro almacenamiento
disponible.
Ejercicio
3.1. Identifique, utilizando el recurso i) y mipsx los diferentes registros de MIPS de propósito general.
Explique para que se utilizan los registros $t0..$t7, $pc, $sp, $zero
3.2. Escriba un programa que inicialice memoria de datos con siete valores de tipo byte, cargue esos
valores en los registros $t0 a $t6, y luego realice una sumatoria utilizando el registro $t7 como registro
para guardar valores intermedios y final.
3.3 Coloque en el segmento de datos de un programa el valor -1 (menos uno). Cargue el valor en un
registro utilizando la instrucción cargar byte (lb). Observe el valor cargado en el registro y explique el por
qué de ese contenido.
4. Representación de instrucciones
Las instrucciones se almacenan codificadas y se decodifican al ser ejecutadas. El formato de instrucción
especifica la estructura de la codificación, la cual consiste de un código de operación y la codificación de
los operandos. Los operandos pueden ser: registros, literales (por ejemplo, el literal 5), y direcciones de
memoria. Los literales se codifican como valores inmediatos en la instrucción, es decir, la instrucción
misma contiene el dato, y no hay necesidad de acceder a los registros o la memoria.
Ejercicio
1. ¿Cuántos bits debe tener el código de una instrucción para una computadora de 53 instrucciones?
Ejercicios
1. ¿Qué tamaño tienen las direcciones de memoria en una computadora capaz de direccionar hasta
1.024 ubicaciones de memoria?
2. Indicar la cantidad de ubicaciones de memoria, y la primera y última dirección (en hexadecimal), para un
sistema con tamaño de dirección de:
(a) 16 bits
(b) 32 bits
(c) 64 bits
3. Indique la cantidad máxima de memoria física que pueden soportar las siguientes arquitecturas:
(a) byte-addressable 32-bit: direcciones de 32 bits, y cada dirección identifica a un único byte de
almacenamiento.
(b) byte-addressable 64-bit: direcciones de 64 bits, y cada dirección identifica a un único byte de
almacenamiento.
Ejercicios
1. ¿Qué tamaño de instrucción tiene una computadora de 256 instrucciones, todas del tipo “dos
direcciones” (dos operandos), y que tiene 65.000 ubicaciones de memoria?
2. En la arquitectura MIPS:
(a) ¿Cuantos bits se utilizan para codificar una instrucción?
(b) ¿Cuántos bits tiene una dirección?
(c) ¿Puede una instrucción codificar una dirección absoluta? Si la respuesta es NO entonces explique cómo
es que se logra acceder a direcciones de memoria utilizando una máquina MIPS.
.text
.globl main
.globl __start
__start:
main:
move $t1, $t2
li $t2, 0xf010e010
add $t2, $t2, 0x2
# finaliza el programa
move $a0, $0
li $v0, 4001
syscall
4. Explique qué relación tienen estas primeras cinco instrucciones en memoria con las desarrolladas en el
programa fuente en lenguaje ensamblador.
5. Dado el siguiente vuelco de memoria de un programa en una arquitectura MIPS, donde la 1ra columna
especifica la dirección de memoria y la 2da columna su contenido, decodifique las instrucciones y escriba
el código en lenguaje ensamblador de MIPS. Utilice la documentación del conjunto de instrucciones de
MIPS32 iii)
[0x00400030] 0x24090001
[0x00400034] 0x01204820
[0x00400038] 0x240b0001
[0x0040003c] 0x012b4020
add, sub, la, lw, sw, and, or, li, bne, beq