Documentos de Académico
Documentos de Profesional
Documentos de Cultura
memoria
ARQUITECTURA DE COMPUTADORES
ALEJANDRO GARCÍA BELMONTE
Actividad 1
Probamos a modificar el contenido de registros y observamos que no podemos
cambiar ni $0 ni $31 ni $pc:
2
Cuestión 1
En el MIPS, la representación de números utiliza el complemento a dos. Para un
registro de 32 bits, el rango de valores va desde el mayor negativo hasta el mayor
positivo.
El mayor positivo que puede contener un registro de 32 bits en hexadecimal es
0x7FFFFFFF.
El mayor negativo que puede contener un registro de 32 bits en hexadecimal es
0x80000000.
3
Cuestión 2
La instrucción addi $10, $8, 5 realiza la suma de los valores 5 y el valor que
contenga el registro $8 y lo almacena en el registro $10.
4
Actividad 2
- En este caso al indicar que la dirección por defecto es la 0x00400000, la
primera instrucción se almacenará ahí, en cambio las siguientes se irán
almacenando en la posición de la instrucción anterior +4, veámoslo en una
imagen:
5
K (16 bits): 0000000000000100 en decimal es 4.
Entonces, la instrucción addi en formato decimal es: 16, 21, 5, 4.
- 20c4000c en binario: 001000 00110 00100 0000000000001100
Op (6 bits): 001000 en decimal es 16.
Rs (5 bits): 00110 en decimal es 6.
rt (5 bits): 00100 en decimal es 4.
K (16 bits): 0000000000001100 en decimal es 12.
Por lo tanto, la instrucción addi en formato decimal es: 16, 6, 4, 12.
6
Actividad 3
Lo que está ocurriendo aquí es que intentamos sumar a un número como es el
7fffffff, 011111111… otro número y al hacer eso estaríamos produciendo overflow
ya que el 7fffffff es el positivo más grande que puede ser representado en un entero
con signo de 32 bits.
7
Cuestión 3
Si quisiésemos sumarle al registro $8, 25, y quisiésemos alcanzar el máximo con
esta suma, tendríamos que restarle al máximo representable 25, por lo que 7fffffff
-25 = 2147483647 -25 = 2147483622. Pasamos ese número a hexadecimal,
7FFFFFE6 y será el valor máximo que podrá tener $8 para que al sumarle 25, no
aborte la operación.
Véase con una imagen:
Al ejecutar la instrucción: addi $9, $8, 25, teniendo en $8=0x7fffffe6, el registro 9
quedaría como máximo y la instrucción se ha ejecutado correctamente.
8
Actividad 4
Si quisiésemos dar un valor inicial a $8 podríamos ejecutar la siguiente instrucción:
addi $8, $zero, K
De esta manera indicando un valor de K podríamos inicializar $8.
Para guardar este resultado en $12, podríamos añadir esta instrucción:
addi $12, $8,0
Si quisiésemos restar simplemente sumaríamos el complemento a dos del número
que deseas restar.
9
Cuestión 4
Para realizar la operación $8 = $8 - 1 utilizando la instrucción addi, podemos
restar 1 sumándole el complemento a dos de 1 en 32 bits (que es -1). Podría
hacerse tal que así:
addi $8, $8, -1
La codificación binaria:
Op (addi): 001000.
Rs ($t8): 01000.
Rt ($t8): 01000.
K: 11111111111111111111111111111111 en binario.
La instrucción addi en binario sería así:
001000 01000 01000 11111111111111111111111111111111.
10
Cuestión 5
Utilizando el convenio de registros, el programa inicial quedaría así:
addi $t1, $t0, 25
addi $t2, $t0, 5
Al ejecutarlo el programa se vería tal que así:
11
Actividad 5
Esto es lo que ocurre al ejecutar el programa:
12
Cuestión 6
El código que utiliza convenio de registros para las operaciones indicadas es:
Addi $t4, $zero, 5
Addi $t2, $zero, 8
Addi $t5, $t4, 10
Addi $t2, $t2, -4
Addi $t6, $t5, -30
Addi $t7, $t2, 0
Ejecutamos y comprobamos que cumple las condiciones indicadas:
13
Cuestión 7
Probamos a ejecutar el Código anterior con instrucciones addiu:
Addiu $t4, $zero, 5
Addiu $t2, $zero, 8
Addiu $t5, $t4, 10
Addiu $t2, $t2, -4
Addiu $t6, $t5, -30
Addiu $t7, $t2, 0
14
Codificamos en binario la instrucción addiu $v0, $zero, 1
- Op (addiu): 001001.
- Rt: 00000
- Rs: 01000
- K: 000000000000001
La instrucción en binario sería: 001001 00000 01000 00000000000001.
15