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