ARQUITECTURA DE COMPUTADORES
Semestre A-2009Clase 10
AGENDA
• Arquitectura MIPS
• Concepto de programa almacenado
• Conjunto de instrucciones MIPS
• El lenguaje ensamblador MIPS
• Registros en MIPS
Arquitectura MIPS
Componentes de la arquitectura
• El Contador de Programa (PC)
• Unidad de Control
• Unidad Aritmético-Lógica
• Registros
• Memoria de Datos
• Memoria de Instrucciones
Programa almacenado
• John von Neumann introdujo, por primera vez, en 1945, la idea de almacenar el programa en memoria
• El programa es almacenado dentro de la máquina para luego ser procesado internamente
• Las instrucciones y los datos son guardados en memoria como números
• Varios usuarios pueden utilizar un mismo computador para diferentes conductas, resultando en diferentes aplicaciones y dándole un carácter universal, como herramienta, al computador
Conjuntos de instrucciones
• Para darle órdenes al hardware de un computador, debemos hablar su idioma
• Las palabras del idioma de los computadores se denominan instrucciones, y su vocabulario es llamado conjunto de instrucciones
• Una instrucción, en lenguaje de máquina, es un código formado por voltajes altos y bajos
• Un conjunto de instrucciones debería:– Facilitar (Simplicidad) la construcción del hardware y el
compilador– Maximizar el rendimiento– Minimizar el costo y el consumo de energía
Conjunto de instrucciones MIPS
• Utilizaremos el conjunto de instrucciones MIPS, desarrollado por MIPS technologies
• Otros conjunto de instrucciones son:– ARM: Del cual se construyeron 3000 millones
de procesadores en el 2008 (Parecido a MIPS)
– Intel x86: El cual fue implementado en alrededor de 330 millones de PCs en 2008.
Almacenamiento de variables en hardware
add $t1,$s6,$s7• A diferencia de los programas de alto nivel, en el
hardware se cuenta con un número limitado de localidades de memoria para ubicar allí los operandos y resultados temporales de operaciones aritméticas
• La arquitectura MIPS cuenta con 32 de estas localidades de memoria, denominadas registros
• Cada registro en MIPS, tiene un tamaño o capacidad de 32 bits.
Convención o compromiso de uso de los 32 registros del MIPS
Registro Nombre Convención de uso
0 $zero Siempre tiene almacenado 0 (32 bits en 0). Las escrituras se ignoran.
1 $at Assembler temporal.
2-3 $v0-$v1 Valores para resultados de funciones y evaluación de expresiones.Se pueden usar también para retornar 1 valor punto flotante.
4-7 $a0-$a3 Argumentos. 4 de precisión simple y 2 de doble precisión.
8-15 $t0-$t7 Valores temporales. Se pueden usar como se desee.
16-23 $s0-$s7 Temporales almacenados. Se pueden usar libremente.
24-25 $t8-$t9 Valores temporales. Se pueden usar como se desee.
26-27 $k0-$k1 Reservados para el kernel del SO y retorno de excepción.
28 $gp Global pointer.
29 $sp Stack pointer.
30 $fp Frame pointer.
31 $ra Return address, grabada por la función de llamada.
Almacenamiento de datos• Los lenguajes de programación permiten tener
estructuras que pueden contener muchos más datos o variables que los que se pueden guardar en 32 registros: ¿Cómo hace el computador para acceder y representar tal cantidad de datos?Los datos se mantienen en memoria
• Por lo tanto, se requieren instrucciones (Capacidades) para
1. Leer un dato desde memoria y guardarlo en un registro2. Tomar un dato guardado en un registro y guardarlo en una
localidad de memoria
• En MIPS, se pueden direccionar 230 palabras de memoria: Memory[0], Memory[4], Memory[8], . . . , Memory[4294967292]
Instrucciones de transferencia de datos
• Carga de datos desde memoria a un registro:lw $s1, 15($s2) # $s1=Memory[$s2+15]
• Almacenamiento de datos desde registros a memoria:sw $s1, 20($s2) # Memory[$s2+20]=$s1
Instrucciones Aritméticas• Las instrucciones aritméticas y lógicas ocurren
sólo sobre registros.
• Suma de dos enteros almacenados en registrosadd $s1,$s2,$s3 # $s1=$s2+$s3
• Resta de dos enteros almacenados en registrossub $s1,$s2,$s3 # $s1=$s2-$s3
• Suma de un valor entero constante a un valor entero guardado en un registroaddi $s1,$s2,5 # $s1=$s2+5
Instrucciones LógicasLas operaciones lógicas realizan las operaciones bit a bit
• AND:and $t0,$t1,$t2 # $t0 = $t1 & $t2
• OR:or $t0,$t1,$t2 # $t0 = $t1 | $t2
• Desplazamiento a la izquierda:sll $s1,$s2,8 # $s1 = $s2 << 8
• Desplazamiento a la derecha:srl $s1,$s2,6 # $s1 = $s2 >> 6
Instrucciones de SaltoLo que distingue a una computadora de una calculadora,
es su capacidad para tomar decisiones
CONDICIONAL:• Saltar si son iguales dos operandos:
beq $s5,$s6,Etiq # if ($s5==$s6) goto Etiq• Salta si son diferentes dos operandos:
bne $s3,$s4,Etiq # if ($s3!=$s4) goto Etiq
INCONDICIONAL• Salta a cierta dirección explicita o etiqueta:
j Etiq # goto Etiq• Salta a la dirección almacenada en el registro:
jr $ra # goto $ra
Ejemplo 1
Programa en C:
int a = 5;
int b= 4;
int c = a + b + 7;
Programa en ensamblador:
addiu $s0,$zero,5
addiu $s1,$zero,4
addu $t0,$s0,$s1
addiu $t0,$t0,7
Ejemplo 2
Programa en C:int f, g = 3, h = 1;
int i = 4, j = 4;
if (i==j)
f=g+h;
else
f=g-h;
Programa en ensamblador:addi $s1,$zero,3
addi $s2,$zero,1
addi $s3,$zero,4
addi $s4,$zero,4
bne $s3,$s4,Else
add $t0,$s1,$s2
j Fin
Else:sub $t0,$s1,$s2
Fin:
Simulador SPIM• Permite ejecutar programas escritos en el lenguaje
ensamblador MIPS32• También ofrece un depurador sencillo y servicios
mínimos de sistema operativo• Se puede descargar de la página
http://pages.cs.wisc.edu/~larus/spim.html