Operaciones con Números
Ciencias de la Computación III
Diego José Figueroa
Operaciones lógicas
- and, andi
- or, ori
- xor, xori
- nor, nori
- sll, sllv, srl, srlv, sra, srav
and, andi
- and $rd $rs $rt
- Hace and entre bits de $rs y $rt, coloca el resultado en $rd.
- andi $rd $rs imm
- Hace and entre bits de $rs y los 16 bits del valor inmediato.
- Ejemplo:
- andi $t0 $t0 0xff
- li $t1 0xffff0000
- and $t0 $t0 $t1
or, ori
- or $rd $rs $rt
- Hace or entre los bits de $rs y $rt, coloca el resultado en $rd.
- ori $rd $rs imm
- Hace or entre los bits de $rs y los 16 bits del valor inmediato.
¿Para qué sirve?
- li $rd imm en realidad no existe!
- El ensamblador lo reemplaza por
- lui $t0 high
- ori $t0 $t0 low
- high son los 16 bits más significantes de imm.
- low son los 16 bits menos significantes de imm.
Corrimientos
- Corrimientos lógicos
- Se ingresan 0's
- sll
- sllv
- srl
- srlv
- Corrimientos aritméticos
- Se ingresa el bit del signo.
- sra
- srav
¿Para qué sirve esto?
- Un corrimiento de n bits a hacia la izquierda es equivalente a multiplicar por 2^n.
- Un corrimiento de n bits a hacia la derecha es equivalente a dividir por 2^n. (sólo números positivos o sin signo)
Aritmética sin signo
- addu, subbu, addui
- Suman números sin signo, es decir, utilizan todos los bits para representar la magnitud del número.
Mate de primaria
10110101
+ 00011111
-------------------
Mate de primaria
10110100
- 00000111
------------------
Otra forma de restar
Dado que, x - y = x + (-y)
Entonces
10110101 - 00001011 =
10110101 + 11110101 = 10101010
Sign extension
- Consiste en copiar el bit del signo hasta llenar la cantidad de bit deseados.
- Utilizado para operar números con signo de 16 bits con números de 32 bits.
Aritmética con signo
- Se diferencia de la aritmética sin signo por la posibilidad de overflow.
- ¿Qué sucede al operar 01111111 + 00000001 ?
- Ambos números son números con signo.
- El resultado es 10000000.
- Esto es un número negativo!
- Pero operamos 2 números positivos.
- Para la suma sin signo esto no es problema.
- Para la suma con signo, provoca una excepción.
Manejando excepciones
-
Una excepción, es un evento especial asíncrono, automático, no planeado.
- El responsable de manejar una excepción se le llama trap handler.
- Este trap handler intenta resolver lo que haya causado la excepción, de forma que el sistema pueda continuar.
Detectando overflow
- Al sumar 2 números, ocurre
- overflow si ambos números son positivos y el resultado es negativo.
- underflow si ambos números son negativos y el resultado es positivo (o cero).
10000001 + 11111101 = 01111110, underflow
Otras formas de manejar
overflow
- Saturación Aritmética
- En lugar de dar vuelta, el resultado es el valor máximo o mínimo posible:
01011111 + 01011111 = 01111111
máximo valor posible (01111111 = MAX_INT)
10000101 + 10001111 = 10000000
mínimo valor posible (10000000 = MIN_INT)
¿Por qué es importante?
- Dependiendo de la aplicación, será preferible una forma u otra de manejar overflow.
- Por ejemplo, para análisis de señales, se prefiere saturación.
Multiplicación
0011
* 1011
-------------
0011
+ 0011
+ 0000
+ 0011
----------------
0100001
Multiplicación
- mult $rs $rt
- multu $rs $rt
- Multiplican el contenido de los registros, y colocan el resultado en los registros hi y lo.
- mflo
- mfhi
- Esto se hace por eficiencia, ya que la multiplicación toma más tiempo en calcularse.
- Además, potencialmente tendremos números de 64 bits.
Multiplicación
- Una multiplicación por una constante, se puede calcular como una serie de corrimientos y sumas.
- Ejemplo
$s1 = $s0 * 9
Equivale a
sll $t0 $s0 3
add $s1 $s0 $t0
Multiplicación con signo
- Se trabaja similar a la multiplicación sin signo, pero
- se extiende el signo de los operandos hasta tener el doble de bits.
- se tomamos los bits menos significativos del resultado
0011
* 1011
----------------
0000 0011
* 1111 1011
----------------
0000 0011
0000 0011
0000 0000
0000 0011
0000 0011
0000 0011
0000 0011
0000 0011
--------------------
1011110001
09 - Operaciones con Números
By Diego Figueroa
09 - Operaciones con Números
- 804