Operaciones aritméticas de enteros
SubAdición
710= 0000 0000 0000 0111b
+
610= 0000 0000 0000 0110b
1
1310= 0000 0000 0000 1101b
Los cuatro bits menos significativos tienen toda la acción
Operaciones aritméticas de enteros
2
Sub
0 0 1 1 1b
+
0 0 1 1 0b
Adición
(0) 1
(1) 0
(1) 0
(0) 1
(0)0
(0)
(1)
(1)
(0)
Operaciones aritméticas de enteros
SubSubstracción (adición de núm. complemento a 2)
610 = 0000 0000 0000 0110b
+
-510 = 1111 1111 1111 1011b
3
110 = 0000 0000 0000 0001b
Se puede decir que ocurre un sobre flujo en la salida. Pero cuando se suman operandos de distinto signo, el resultado es menor que uno de los operandos.
Sobre-flujo
La suma o resta de dos números de 32-bits, podría arrojar un resultado que requiera de 33-bits para ser expresado totalmente. Esto significa que el acarreo ocurre en el bit de signo.
Ocurre sobre flujo en los siguientes casos :
Resta : núm. positivo – núm. negativo = núm. negativo
Resta : núm. negativo – núm. positivo = núm. positivo
Suma : núm. positivo + núm. positivo = núm. negativo
Suma : núm. negativo + núm. negativo = núm. positivo
Sobre-flujo (Sin Signo)
La suma o resta de dos números sin signo, son comúnmente utilizados en direccionamiento de memoria. El sobre flujo se ignora! .
Los arquitectos de computadoras deben proporcionar una forma de ignorar el sobre flujo en algunos casos y reconocerlo en otras.
MIPS proporciona dos tipos de instrucciones:
Suma (add), Suma un inmediato (addi) y Resta (sub) causan excepciones de sobre-flujo.
Suma sin signo (addu), suma un inmediato sin signo (addiu) y resta sin signo (subu) ignoran sobre-flujo.
Implicaciones de programación
SubC ignora el sobre-flujo: el compilador de C para MIPS siempre genera las versiones sin signo de las instrucciones aritméticas (addu, addiu, subu) no importa el tipo de variable.
EL procesador MIPS (BIOS) : detecta el sobre flujo con una excepción, para corregir el código.
Se utiliza el registro EPC (Exception Program Counter) para almacenar la dirección de la instrucción que causó la excepción, utiliza la instrucción mfsc0 (move from system control ) para copiar EPC a un registro de propósito general y regresar el control del programa.
6
Operaciones Lógicas
SubShift: mueven todos los bits de una palabra a la derecha o a la izquierda, llenando los bits vacios con ceros.
7
$0: 0000 0000 0000 0000 0000 0000 0000 0110b = 610
sll $t2, $0, 8
$t2: 0000 0000 0000 0000 0000 0110 0000 0000b = 153610
MIPS Shift:
sll (shift left logical)
srl (shift right logical)
Operaciones Lógicas
SubAND: es una operación bit-a-bit, que se realiza entre dos vectores de igual numero de bits. (1&1=1)(1&0=0)
8
$t1: 0000 0000 0000 0000 0000 0000 0000 0110b
and $t0, $t1, $t2
$t2: 0000 0000 0000 0000 0000 0110 0000 1111b
Muy útil para crear mascaras de bits
$t2: 0000 0000 0000 0000 0000 0000 0000 0110b
Operaciones Lógicas
SubOR: es una operación bit-a-bit, que se realiza entre dos vectores de igual numero de bits. (1|X=1)(0|0=0)
9
$t1: 0000 0000 0000 0000 0000 0000 0000 0110b
and $t0, $t1, $t2
$t2: 0000 0000 0000 0000 0000 0110 0000 1111b
$t2: 0000 0000 0000 0000 0000 0110 0000 1111b
MIPS :
and, andi (and, and inmediate)
or, ori (or, or inmediate)
Operaciones Lógicas C-MIPS
10
SubResumen:
Diseñando Unidades Funcionales
SubSi el procesador es el cerebro de la computadoras, las unidades funcionales son las neuronas. ALUs, Sumadores, Multiplicadores, Divisores, SQR, etc.
11
ALU 1-bit
SubLas operaciones lógicas son las mas fáciles de implementar por que se mapean directamente a los componentes de hardware.
12
ALU
SubUnidad Lógica de 1-Bit /AND/OR
13
Sumador de 1-bit
14
Sumador de 1-bit
15
Acarreo de salida (Cout)
16
SubCout= (!a*b*Cin)+(a*!b*Cin)+(a*b*!Cin)+(a*b*Cin)
Cout= (Cin*b)+(Cin*a)+(a*b)
Bit de Acarreo
17
Demostrar la simplificación de la ecuación para Cout
Sumador de 1-bit
18
SubSuma= (!a*!b*!Cin) + (!a*b*!Cin) + (a*!b*!Cin) + (Cin*a*b)
Suma= (a x b) x Cin; x= or excluiva
Suma
19
Demostrar la simplificación de la ecuación para Suma
Sumador Completo 1-bit
20
ALU (AND, OR, SUMA)
21
SubEl sumador puede calcular:
a + b
a +!b + 1 = a b (seleccionando invert y Cin)
Completando una ALU para MIPS
Subslt (set on less than) , slt $1, $2, $3
Detecta cuando a < b, $1 = 01 si $2 < $3 , $1 = 00 de otra manera.
Si hacemos:
(a b) < 0
(a b) + b < 0 + b
a < b
22
Es exactamente la condición de sobre flujo que se da en substracción de enteros con signo (Diapositiva 24)
(set on less than)
23
32-bit ALU
24
Soportando Saltos Incondicionales
SubEstas instrucciones saltan si dos registros son iguales. La forma rapida de ver si (a==b) es haciendo (a-b) y checar si el resultado es cero.
25
ALU 32-bits
26
Calculo rápido del bit de acarreo
Sub?
27
Multiplicación
Sub 0 1 1 0
X 0 0 1 0
28
0 1 1 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 1 1 0 0
+
Desplazamiento
Multiplicador
29
0 0 0 0
0 0 1 0
Inicio
0 1 1 0
0
Multiplicador
30
0 0 0 0
0 0 1 0
1er Ciclo: desplaza a la derecha (Reg. Prod.)
0 1 1 0
0
0
Multiplicador
31
0 0 0 0
0 0 0 1
1er Ciclo: estado final
0 1 1 0
1
1
Multiplicador
32
0 1 1 0
0 0 0 1
2do Ciclo: estado inicial
Suma y
.
0 1 1 0
1
1
Multiplicador
33
0 0 1 1
0 0 0 0
2do Ciclo: estado inicial
Suma y Desplaza
0 1 1 0
1
1
Multiplicador
34
0 0 1 1
0 0 0 0
2do Ciclo: estado final
0 1 1 0
0
0
Multiplicador
35
0 0 1 1
0 0 0 0
3er Ciclo: estado inicial
0 1 1 0
0
0
Multiplicador
36
0 0 0 1
1 0 0 0
3er Ciclo: estado final
desplaza
0 1 1 0
0
0
Multiplicador
37
0 0 0 1
1 0 0 0
4er Ciclo: estado inicial
0 1 1 0
0
0
Multiplicador
38
0 0 0 0
1 1 0 0
4er Ciclo: estado final
Desplaza (fin)
0 1 1 0
0
0
Algoritmo de multiplicación de Booth
39
Sub?
División
40
Sub 0010 0 1 1 1
0 0 0 0 1
0 0 0 0
0 0 0 0
0 0 1 0
–
0 0 0 1 1
–
–
0 0 0 1 1
0
0
1
1
0 0 1 0
–
0 0 0 1