290 likes | 432 Views
ARQUITECTURA DE COMPUTADORES. Semestre A-2009 Clase 13. AGENDA. 2do Examen Parcial: Martes 30/06/2009 Repaso Ejercicios. Representación de números binarios con signo.
E N D
ARQUITECTURA DE COMPUTADORES Semestre A-2009 Clase 13
AGENDA • 2do Examen Parcial: Martes 30/06/2009 • Repaso • Ejercicios
Representación de números binarios con signo • A los números positivos y al cero, los hemos representado con n dígitos binarios, pero ¿Cómo representamos los números negativos en binario? • Existen tres representaciones de números enteros con signo en binario: • Signo - Magnitud • Signo - Complemento: • Complemento a 1 • Complemento a 2 • La representación utilizada en la actualidad, es el complemento a 2
Representación Signo - Magnitud • El bit más significativo indica el signo del número: 0001 0110 → +22 1011 0100 → -52 • Algunos inconvenientes: • Existen dos ceros • +0 : 0000 0000 • -0 : 1000 0000 • ¿Cómo podríamos sumar dos dígitos en Signo - Magnitud? • Comparar los signos: Iguales → Suma, Distintos → Resta Bit de signo n Bits: Parte entera m Bits: Parte decimal
Representación en Complemento a 1 • El negativo de un número se obtiene al colocar todos los 1s como 0s y todos los 0s como 1s. 0001 0110 → +22 1110 1001 → -22 • Algunos inconvenientes: • Existen dos ceros • +0 : 0000 0000 • -0 : 1111 1111 • ¿Cómo podríamos sumar dígitos en Complemento a 1? • Se realiza la suma (Circuitería de suma) • Si hay un bit de acarreo, se suma (2da suma) • Si los signos son distintos, se coloca el signo del mayor (Circuitería de detección del mayor) A = 2n – an-1an-2. . .a1a0
Representación en Complemento a 2 • El negativo de un número se obtiene al colocar el número en complemento a 1 y sumarle una unidad (1). 0001 0110 → +22 1110 1010 → -22 • Una forma rápida de calcular el complemento a 2 es: • Recorriendo el número de derecha a izquierda, deje los 0s sin cambiar • Siguiendo el recorrido, deje al primer 1 sin modificar • A partir de allí, cambie los 0s por 1s y los 1s por 0s • Características: • Existe un solo cero: 0000 0000 • ¿Cómo se sumarían dos dígitos en Complemento a 2? • Se realiza la suma (Circuitería de suma) A = 2n – an-1an-2. . .a1a0 + 1
Ejemplo de sumas en Complemento a 2 b) 0001 0110 → +22 1100 1100 → -52 1110 0010 → -30 a) 0001 0110 → +22 0011 0100 → +52 0100 1010 → +74 c) 1110 1010 → -22 0011 0100 → +52 10001 1110 → +30 d) 1110 1010 → -22 1100 1100 → -52 11011 0110 → -74
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
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.
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 • Leer un dato desde memoria y guardarlo en un registro • 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]
Formato de instrucción R • Las instrucciones aritméticas registro a registro, utilizan el formato de instrucción R. • op es el código de instrucción, y func especifica una operación aritmética particular. • rs, rt y rd son los dos registros fuentes y el registro destino • Un ejemplo de una instrucción y su codificación es: add$s4, $t1, $t2
Formato de instrucción I • Las instrucciones lw, sw y beq instructions utilizan el formato de instrucción I. • rt es el destino para lw, pero una fuente para beq y sw. • dirección es una constante, con signo, de 16 bits. • Dos ejemplos: lw$t0, –4($sp) sw$a0, 16($sp)
Saltos • Para las instrucciones de salto, la constante no es una dirección, sino un desplazamiento de instrucción desde el contador de programa actual, hasta la dirección deseada. beq $at,$0,Etiq add $v1, $v0, $0 add $v1, $v1, $v1 j Etiq Etiq: add $v1, $v0, $v0 • La dirección destino Etiq está tres instrucciones después de beq, por lo que la codificación de la instrucción de salto tendrá 0000 0000 0000 0011 como campo de dirección. • Las instrucciones tienen 4 bytes de largo, por lo que el desplazamiento real es de 12 bytes.
0 M u x 1 Add PC 4 Add Shift left 2 PCSrc RegWrite MemToReg MemWrite Leer dirección Instrucción [31-0] I [25 - 21] Leer registro 1 Leer data 1 ALU Leer dirección Leer data 1 M u x 0 I [20 - 16] Zero Leer registro 2 Memoria deInstrucciones Leer data 2 0 M u x 1 Resultado Escribir dirección 0 M u x 1 Escribir registro Memoriade Datos Escribir data Registros I [15 - 11] ALUOp Escribir data MemRead ALUSrc RegDst I [15 - 0] Signo extend El camino de datos final
RegWrite ALUOp MemWrite RegDst I [31 - 26] ALUSrc I [5 - 0] MemToReg Leer dirección Instrucción [31-0] Control Memoria deInstrucciones MemRead PCSrc Zero Señales de control generales • La unidad de control requiere 13 bits de entrada. • Seis bits del opcode de instrucción. • Seis bits del campo de instrucción func. • La salida Zero de la UAL. • La unidad de control genera 10 bits de salida, correspondientes a las señales mencionadas en la lámina anterior.
Ejemplo 2 Programa en C: int i = 0, j = 5; while (vector[i]==j) i+=1; Programa en ensamblador: li $s1,0 li $s2,5 # vector en $s6=0x10010040 While: sll $t1,$s1,2 add $t1,$t1,$s6 lw $t2,0($t1) bne $t2,$s2,Fin addi $s1,$s1,1 j While Fin:
Ejemplo 3 Programa en C: x = 0; for(int i=0;i<100;i++) { x = x+i; } Programa en ensamblador: li $s1,0 # i = 0 li $s2,0 # x = 0 For: slti $t0,$s1,100 beq $t0,$zero,Fin add $s2,$s2,$s1 addi $s1,$s1,1 j For Fin:
Tarea • Realizar un programa en lenguaje ensamblador MIPS, que calcule el factorial de un número (De manera no recursiva). • Realizar un programa en lenguaje ensamblador MIPS, que calcule la multiplicación de dos números a través de sumas sucesivas.
Ejemplo 4 Programa en C: int i, x = 8,f=1; for(i=2;i<=x;i++) { f = f * i; } Programa en ensamblador: li $s1,2 # i = 2 li $s2,8 # x = 8 li $t0,1 # f = 1 For: slt $t1,$s2,$s1 bne $t1,$zero,Fin mult $t0,$s1 mflo $t0 addi $s1,$s1,1 j For Fin:
Ejemplo 5 Programa en C: int a = 4, b = 5; int suma = a; for(int = 1; i<b; i++) { suma = suma + a; } Programa en ensamblador: li $s0,1 # i = 1 li $s1,4 # a = 4 li $s2,5 # b = 5 add $t0,$zero,$s1 For: slt $t1,$s0,$s2 bne $t1,$zero,Fin add $t0,$t0,$s1 addi $s0,$s0,1 j For Fin: