Download Clase 5
Document related concepts
Transcript
Organización del Computador I Verano Aritmética (1 de 3) Basado en el capítulo 4 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn Números • Los números se representan con tiras de bits. • La posición relativa de cada dígito binario determina su valor (igual que en el sistema decimal: unidades, decenas, centenas...) • El valor decimal del número se calcula: n 1 d i * 2i i 0 • La cantidad de bits de la representación, n, determina el máximo número representable. • Por ejemplo: con 32 bits, se podrán representar los números del 0..232-1. • Muchas veces, después de una operación aritmética, el resultado obtenido no es representable con los n bits de la representaciónDesbordamiento Representación de números negativos • Signo y Magnitud: 000 = +0 001 = +1 010 = +2 011 = +3 100 = -0 101 = -1 110 = -2 111 = -3 Complemento a dos 000 = +0 001 = +1 010 = +2 011 = +3 100 = -4 101 = -3 110 = -2 111 = -1 • ¿Cual elegir? balanceo, número de ceros, facilidad para el hardware • Rango de la representación: – Signo y magnitud: -(2n-1 -1)<=x<=2n-1 -1 – Complemento a 2: -(2n-1)<=x<=2n-1-1 Representación Complemento a 2 • Se llama complemento a 2 porque la suma de cualquier número y su negativo dan 2n. 0001 0100 0111 1111 10000 1100 10000 1001 10000 • El complemento a 2 de un número x es: 2n –x 10000 0111 00111 01001 1001 10000 • Los números positivos tienen una serie infinita de ceros a la izquierda, los números negativos tienen una serie infinita de unos a la izquierda. • El bit mas significativo se llama “bit de signo” Representación Complemento a 2 • Los números enteros (positivos y negativos) se representan mediante una tira de n bits, el valor decimal de dicha tira se llama valor explícito. xe x mod 2 n si x 0 x xe n 2 x si x 0 • Ejemplo: n=4 5xe=x=5 -5xe=16-5=11 0101 1011 Representación Complemento a 2 • Dado un valor explícito, el valor del número entero se obtiene: x xe mod 2 n • Ejemplo: si bit n -ésimo 0 xe x n (2 xe ) si bit n -ésimo 1 0111 1001 x=xe=7 x= -(16-9)=-7 Propiedad de la Representación Complemento a 2 • Las operaciones de suma y resta se pueden hacer sin tomar en cuenta el signo del operando, es decir, se pueden sumar (o restar) directamente los valores explícitos. xe x mod 2 n si x 0 x xe n 2 x si x 0 S x y • Se demuestra que es equivalent e a hacer S e ( xe ye )mod 2 n Ejemplos con n=4 bits Dato X Y Xe Ye Se S Entero 3 -4 3 12 (3+12)mod16=15 -1 Natural 3 12 3 12 (3+12)mod16=15 15 Entero -7 -2 9 14 (9+14)mod16=7 -9 Natural 9 14 9 14 (9+14)mod16=7 23 1001 1110 10111 El resultado (23) no es representable con 4 bits C=1, indica desbordamiento 1111 1110 11101 ¿Que sucede si interpretamos los números como enteros? C=1, NO indica desbordamiento Desbordamiento para números con signo • Al sumar: – Cuando los operandos tienen el mismo signo y se obtiene un resultado con signo contrario • Al restar: – Cuando se resta un número negativo de un número positivo y el resultado es negativo – Cuando se resta un número positivo a uno negativo y el resultado da positivo. Determinación de Desbordamiento para números enteros Xn-1 Yn-1 Cin Cout S V 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 1 0 0 1 1 1 0 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 1 1 1 1 1 0 V Cin Cout Restas: Restar Sumando R= Y + (-X) Necesitamos la operación de cambio de signo -X = 2n –Xe Pero: no queremos restar!! -X = (2n – 1 ) – Xe + 1 Todos unos C a 1 de X C a 2 de X Restas: Restar Sumando 1101 0011 0 1010 1101 1101 1 1010 MIPS Números con signo de 32 bits: 0000 0000 0000 ... 0111 0111 1000 1000 1000 ... 1111 1111 1111 0000 0000 0000 0000 0000 0000 0000two = 0ten 0000 0000 0000 0000 0000 0000 0001two = + 1ten 0000 0000 0000 0000 0000 0000 0010two = + 2ten 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1111 1111 0000 0000 0000 1110two 1111two 0000two 0001two 0010two = = = = = + + – – – 2,147,483,646ten maxint 2,147,483,647ten 2,147,483,648ten 2,147,483,647ten minint 2,147,483,646ten 1111 1111 1111 1111 1111 1111 1101two = – 3ten 1111 1111 1111 1111 1111 1111 1110two = – 2ten 1111 1111 1111 1111 1111 1111 1111two = – 1ten MIPS: Extensión de signo • Se utiliza para convertir un número de n bits en un número de mas de n bits. – El operando inmediato de 16 bits debe convertirse en un operando de 32 bits para operar. – Se copia el bit más significativo (bit de signo) 0010 -> 0000 0010 1010 -> 1111 1010 • La instrucción load byte (lb) trata el número como un número con signo, extendiendo el signo sobre el registro de 32 bits. La instrucción load byte unsigned (lbu), simplemente rellena con ceros los 24 bits del registro de 32. MIPS: Efecto del Desbordamiento • Cuando se detecta desbordamiento, MIPS provoca una excepción: – El control del programa pasa a una dirección predefinida, donde se ejecuta un código de error. – La dirección del programa que ha causado la excepción se guarda en un registro especial llamado EPC (exception program counter). – La instrucción mfc0 permite copiar la dirección guardada en el EPC sobre un registro de propósito general para poder retornar el programa original. – Volveremos mas adelante sobre el tema de las excepciones...... MIPS: Efecto del Desbordamiento • No siempre nos interesa detectar el desdordamiento: por ejemplo, en la aritmética de direcciones (punteros), números sin signo. – MIPS diferencia dos tipos de instrucciones: las que ignoran el desbordamiento (addu,addiu,subu, etc) y las que generan excepciones (add, addi, sub, etc) – Los compiladores usan una u otra versión. – Observemos que, en las instrucciones con operando inmediato hay extensión de signo, de 16 a 32 bits, tanto para números con signo, como para números sin signo. – También observemos que hay dos instrucciones de comparación diferentes: sltu, (sltiu) y slt (slti). Códigos para detectar desbordamiento addu xor slt bne xor slt Bne $t0,$t1,$t2 $t3,$t1,$t2 $t3,$t3,$zero $t3,$zero, no_hay $t3,$t0, $t1 $t3,$t3,$zero $t3,$zero, hay addu nor sltu bne #suma sin deteccion #para comprobar los signos #$t3=1 si los signos difieren # si los signos difieren no hay # puede haber.... #los tres signos difieren=>hay c $t0,$t1,$t2 $t3,$t1, $zero $t3,$t3, $t2 $t0, $zero, hay FIN Aritmética(1 de 3)