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).

01111111 + 00000001 = 10000000, overflow

   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
Made with Slides.com