Organización del Computador I Verano Aritmética (1 de 3) Basado en el capítulo 4 del libro de Patterson y Hennessy Verano 2004Profesora 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: 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 Muchas veces, después de una operación aritmética, el resultado obtenido no es representable con los n bits de la representación Desbordamiento
Signo y Magnitud: Complemento a dos 000 = = = = = = = = = = = = = = = = -1 ¿Cual elegir? balanceo, número de ceros, facilidad para el hardware Rango de la representación: –Signo y magnitud: -(2 n-1 -1)<=x<=2 n-1 -1 –Complemento a 2: -(2 n-1 )<=x<=2 n-1 -1 Representación de números negativos
Representación Complemento a 2 Se llama complemento a 2 porque la suma de cualquier número y su negativo dan 2 n. El complemento a 2 de un número x es: 2 n –x 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. Ejemplo: n=4 5 xe=x= xe=16-5=111011
Representación Complemento a 2 Dado un valor explícito, el valor del número entero se obtiene: Ejemplo: 0111x=x e =7 1001x= -(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. Se demuestra que
Ejemplos con n=4 bits DatoXYXeYeSeS Entero (3+12)mod16=15-1 Natural (3+12)mod16=1515 Entero (9+14)mod16=7-9 Natural (9+14)mod16=723 El resultado (23) no es representable con 4 bits C=1, indica desbordamiento C=1, NO indica desbordamiento ¿Que sucede si interpretamos los números como enteros?
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 X n-1 Y n-1 CinCoutSV
Restas: Restar Sumando R= Y + (-X) Necesitamos la operación de cambio de signo -X = 2 n –X e Pero: no queremos restar!! -X = (2 n – 1 ) – X e + 1 Todos unos C a 1 de X C a 2 de X
Restas: Restar Sumando
Números con signo de 32 bits: two = 0 ten two = + 1 ten two = + 2 ten two = + 2,147,483,646 ten two = + 2,147,483,647 ten two = – 2,147,483,648 ten two = – 2,147,483,647 ten two = – 2,147,483,646 ten two = – 3 ten two = – 2 ten two = – 1 ten maxint minint MIPS
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) > > 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: Extensión de signo
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). MIPS: Efecto del Desbordamiento
Códigos para detectar desbordamiento addu$t0,$t1,$t2#suma sin deteccion xor$t3,$t1,$t2#para comprobar los signos slt$t3,$t3,$zero #$t3=1 si los signos difieren bne$t3,$zero, no_hay # si los signos difieren no hay xor$t3,$t0, $t1 # puede haber.... slt$t3,$t3,$zero#los tres signos difieren=>hay Bne$t3,$zero, hayc addu$t0,$t1,$t2 nor$t3,$t1, $zero sltu$t3,$t3, $t2 bne$t0, $zero, hay
FIN Aritmética(1 de 3)