12 de Março de 2007 1. Aula 5



Documentos relacionados
Aritmética Computacional (Multiplicação e Divisão) Capítulo 4

ELECTRÓNICA DE COMPUTADORES. 6ª a 8ª Aulas Datapath: Multiplicadores e divisores de números inteiros

Vírgula flutuante Aula 6

Aritmética Computacional. Prof. Leonardo Barreto Campos 1

números decimais Inicialmente, as frações são apresentadas como partes de um todo. Por exemplo, teremos 2 de um bolo se dividirmos esse bolo

números decimais Inicialmente, as frações são apresentadas como partes de um todo. Por exemplo, teremos 2 de um bolo se dividirmos esse bolo

UNIMINAS Só é necessário o armazenamento de: Sinal da mantissa: - (menos). Valor da mantissa: Sinal do expoente: -(na realidade, háh

=...= 1,0 = 1,00 = 1,000...

Arquitetura de Computadores

1. Números. MatemáticaI Gestão ESTG/IPB Departamento de Matemática. Números inteiros. Nota: No Brasil costuma usar-se: bilhão para o número

William Stallings Arquitetura e Organização de Computadores 8 a Edição

Arquitetura e Organização de Computadores

Arquitetura de Computadores I

Aritmética dos Computadores

FRAÇÃO. Número de partes pintadas 3 e números de partes em foi dividida a figura 5

Capítulo 6. Aritmética Computacional. 6.1 Números com Sinal e Números sem Sinal

Arquitetura de Computadores I

EA960 Aritmética e Representação Numérica

BC-0504 Natureza da Informação

Representações de caracteres

Capítulo VI Circuitos Aritméticos

Multiplicador Binário com Sinal

Sistemas Numéricos. Tiago Alves de Oliveira

Resumos para a Prova de Aferição. Matemática

Arquitetura de Computadores II MIPS64. Prof. Gabriel P. Silva

Apontamentos de matemática 5.º ano - Múltiplos e divisores

Aritmética Computacional (Ponto Flutuante) Capítulo 4

Sistemas Digitais. Circuitos Aritméticos. Monitoria SD Daniel Alexandro/Reniê Delgado/Vanessa Ogg. Editado por (DARA)

Módulos Combinatórios

SISTEMAS DIGITAIS (SD)

SISTEMAS DIGITAIS (SD)

Organização e Arquitetura de Computadores I

Detecção de erros de comunicação de dados CRC

POTENCIAÇÂO. A potenciação é uma forma de representar uma multiplicação de fatores iguais.

Prof. Leonardo Augusto Casillo

Actividade de enriquecimento. Algoritmo da raiz quadrada

Aritmética Binária e Complemento a Base. Introdução ao Computador 2010/1 Renan Manola

Capítulo 6 Aritmética Digital: Operações e Circuitos

Funcionamento básico de um computador

Resolução de sistemas de equações lineares: Método de eliminação de Gauss

Ciclo com Contador : instrução for. for de variável := expressão to. expressão do instrução

NÚMEROS NATURAIS < > Matemática = = Editora Exato INTRODUÇÃO 4. OPERAÇÕES COM NÚMEROS NATURAIS

Conteúdos: Debora, Edcarllos, livros! slides disponíveis!

Sistemas Digitais (SD) Unidade Lógica e Aritmética

Disciplina de Laboratório de Elementos de Lógica Digital I SSC-0111

Capítulo 6 Aritmética Digital: Operações e Circuitos

Notas de Aula Guilherme Sipahi Arquitetura de Computadores. Aritmética de Inteiros

Sistemas de Numeração (Aula Extra)

Multiplicação Divisão

Circuitos Aritméticos

Unidade 3 Aritmética Computacional Uma breve introdução

POTENCIAÇÃO, RADICIAÇÃO E LOGARITMAÇÂO NOS NÚMEROS REAIS. Potenciação 1

3.3 Qual o menor caminho até a Escola? 28 CAPÍTULO 3. CICLOS E CAMINHOS

Caminho de Dados e Controle. Prof. Leonardo Barreto Campos 1

Universidade Federal de Uberlândia Faculdade de Computação. Representação e aritmética binária

Lista de Exercícios Critérios de Divisibilidade

Data Path / Control Path Controle do MIPS

Números escritos em notação científica

EJA 3ª FASE PROF.ª CHRISTIANE MELLO PROF.ª JEANNE ARAÚJO

Em cada uma dessas frases, há uma quantidade indicada em forma de fração. Veja:

ARQUITECTURA DE COMPUTADORES

Aritmética em Bases Não Decimais

O SOROBAN COMO INSTRUMENTO PARA O DESENVOLVIMENTO DAS OPERAÇÕES MATEMÁTICAS

Sistemas de Numeração. Exemplos de Sistemas de Numeração (1) Exemplos de Sistemas de Numeração (2) Sistemas de Numeração

Algoritmo da raiz quadrada

Em linguagem matemática, essa proprieade pode ser escrita da seguinte maneira: x. 1 = x Onde x representa um número natural qualquer.

Fração é uma forma de representar uma divisão, onde o numerador é o dividendo e o denominador é o divisor. Exemplo:

Potenciação e radiciação

Organização e Arquitetura de computadores

OPERAÇÕES FUNDAMENTAIS

MC Teste de Mesa e Comandos Repetitivos

Álgebra Linear Computacional

Memórias Cache. Memória

FRAÇÃO Definição e Operações

QUESTÃO 3 ALTERNATIVA E 24 é o maior número que aparece na figura. Indicamos abaixo a sequência de operações e seu resultado

Circuitos Lógicos. Capítulo 9 Aritmérica Digital: Operações e Circuitos

a) 2 b) 3 c) 4 d) 5 e) 6

Análise de Algoritmos

O QUE É O CALC PLANILHAS ELETRÔNICAS O Calc é um programa que trabalha com planilhas.

flutuante 11. Aritmética de vírgula Operações em números fraccionários

CAPÍTULO O Método Simplex Pesquisa Operacional

XXXII Olimpíada Brasileira de Matemática. GABARITO Segunda Fase

Aritmética. E agora: Implementação da Arquitetura

Equipe de Matemática MATEMÁTICA

Um pouco da História dos Logaritmos

CURSO DE MATEMÁTICA BÁSICA PROGRAMA DE EDUCAÇÃO TUTORIAL CENTRO DE ENGENHARIA DA MOBILIDADE

MÓDULO XVI MEDIDAS DE ÂNGULOS. Um ângulo é classificado como agudo quando sua medida é maior que 0º e menor que 90º. 1. Definição de ângulo

IBM1018 Física Básica II FFCLRP USP Prof. Antônio Roque Aula 7

Infraestrutura de Hardware. Implementação Monociclo de um Processador Simples

CONCURSO DE ADMISSÃO AO COLÉGIO MILITAR DO RECIFE - 98 / 99 MÚLTIPLA ESCOLHA

Capítulo 3. Aritmética de Computadores

Transcrição:

12 de Março de 2007 1 Multiplicação e divisão inteiras Aula 5

Estrutura desta aula Multiplicação básica Multiplicações melhoradas Multiplicação em complemento para 2 Algoritmo de Booth Divisão básica Ref: Hennessy & Patterson, H.2 Ref: Patterson & Hennessy (bibliografia suplementar), 34 3.4, 35 3.5 14 de Março de 2005 Arquitectura de Computadores 2004/05 2-Aula 5

Multiplicação l básica (1) Mais complicado do que as adições Usam-se deslocamentos e adições Mais tempo e área de silício Para números sem sinal 2 x 11 = 22 2 + 4 + 0 + 16 = 22 Multiplicando A (N bits) Multiplicador B (N bits) N Produtos parciais Produto final (2N bits) 0 0 1 0 x 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 1 1 0 14 de Março de 2005 Arquitectura de Computadores 2004/05 3-Aula 5

Multiplicação l básica (2) 0 0 0 A 3 0 0 0 0 A A A A 2 A 1 A 0 B 0 A A 2 A 1 A 3 0 B 1 A 3 A 2 A 1 A 0 B 2 A 3 A 2 A 1 A 0 B3 P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 Em cada passo desloca A para a esquerda (x 2) Usa o bit seguinte de B para decidir se soma ou não o multiplicando deslocado Acumula o produto parcial com 2N bits em cada passo 14 de Março de 2005 Arquitectura de Computadores 2004/05 4-Aula 5

Multiplicação l básica (3) Precisamos de: Somador com 2N bits Registo com N bits para o multiplicador Registo com 2N bits para o multiplicando (inicialmente alinhado à direita) Registo com 2N bits para os resultados intermédio e final (inicialmente a 0) Vamos operar em N passos (ou etapas) 14 de Março de 2005 Arquitectura de Computadores 2004/05 5-Aula 5

Multiplicação l básica (4) Valor inicial = 00000000 Multiplicando 0 0 0 0 0 0 1 0 Multiplicador Somador 2N bits 1 0 1 1 0 0 0 0 0 0 0 0 Produto parcial 14 de Março de 2005 Arquitectura de Computadores 2004/05 6-Aula 5

Multiplicação l básica (5) Passo 1: como o LSB do multiplicador é 1, soma e, em seguida, desloca o multiplicador para a direita e o multiplicando para a esquerda Valor inicial = 00000000 Multiplicando 0 0 0 0 0 0 1 0 Somador 2N bits 0 0 0 0 0 0 1 0 Produto parcial ADICIONA Multiplicador 1 0 1 1 Se 1, adiciona, senão não faz nada 14 de Março de 2005 Arquitectura de Computadores 2004/05 7-Aula 5

Multiplicação l básica (6) Passo 1: (cont.) Desloca 1 bit para a esquerda Multiplicando 0 0 0 0 0 1 0 0 Somador 2N bits Multiplicador x 1 0 1 0 0 0 0 0 0 1 0 Produto parcial Desloca 1 bit para a direita 14 de Março de 2005 Arquitectura de Computadores 2004/05 8-Aula 5

Multiplicação l básica (7) Passo 2: idêntico ao passo 1 Valor anterior = 00000010 Multiplicando 0 0 0 0 0 1 0 0 Somador 2N bits 0 0 0 0 0 1 1 0 Produto parcial ADICIONA Multiplicador x 1 0 1 Se 1, adiciona, senão não faz nada 14 de Março de 2005 Arquitectura de Computadores 2004/05 9-Aula 5

Multiplicação l básica (8) Passo 2: (cont.) Desloca 1 bit para a esquerda Multiplicando 0 0 0 0 1 0 0 0 Somador 2N bits Multiplicador x x 1 0 0 0 0 0 0 1 1 0 Produto parcial Desloca 1 bit para a direita 14 de Março de 2005 Arquitectura de Computadores 2004/05 10 - Aula 5

Multiplicação l básica (9) Passo 3: só desloca (não soma) Valor anterior = 00000110 Multiplicando 0 0 0 0 1 0 0 0 Somador 2N bits 0 0 0 0 0 1 1 0 Produto parcial Multiplicador x x 1 0 Se 1, adiciona, senão não faz nada 14 de Março de 2005 Arquitectura de Computadores 2004/05 11 - Aula 5

Multiplicação l básica (10) Passo 3: (cont.) Desloca 1 bit para a esquerda Multiplicando 0 0 0 1 0 0 0 0 Somador 2N bits Multiplicador x x x 1 0 0 0 0 0 1 1 0 Produto parcial Desloca 1 bit para a direita 14 de Março de 2005 Arquitectura de Computadores 2004/05 12 - Aula 5

Multiplicação l básica (11) Passo 4: idêntico ao passo 1 Valor anterior = 00000110 Multiplicando 0 0 0 1 0 0 0 0 Somador 2N bits 0 0 0 1 0 1 1 0 Produto parcial ADICIONA Multiplicador x x x 1 Se 1, adiciona, senão não faz nada 14 de Março de 2005 Arquitectura de Computadores 2004/05 13 - Aula 5

Multiplicação l básica (12) Passo 4: (cont.) Desloca 1 bit para a esquerda Multiplicando 0 0 1 0 0 0 0 0 Somador 2N bits Multiplicador x x x x 0 0 0 1 0 1 1 0 Produto final Desloca 1 bit para a direita 14 de Março de 2005 Arquitectura de Computadores 2004/05 14 - Aula 5

Multiplicação l básica (13) Para N = 64 bits, por exemplo Multiplicando 128 bits Shift Left ALU 128 bits Multiplicad. 64 bits Shift Righ Produto 128 bits Write Controlo 14 de Março de 2005 Arquitectura de Computadores 2004/05 15 - Aula 5

Multiplicação l básica (14) Para N = 64 bits, por exemplo Multiplier0 = 1 Start 1. Test Multiplier0 Multiplier0 = 0 1a. Add multiplicand to product & place the result in Product register 2. Shift the Multiplicand register left 1 bit 3. Shift the Multiplier register right 1 bit 64rd repetition? No: < 64 repetitions Yes: 64 repetitions Done 14 de Março de 2005 Arquitectura de Computadores 2004/05 16 - Aula 5

Multiplicação l básica (15) Observações 3 ciclos de relógio por iteração ~ 200 ciclos de relógio para uma multiplicação com multiplicador de 64 bits Estatisticamente, metade dos bits do multiplicando sempre a 0 a 0 64 bits do somador desperdiçados Os 0s da esquerda do multiplicando são ejectados Os bits menos significativos dos produtos parciais, uma vez formados nunca mais mudam Em vez de deslocar o multiplicando para esquerda, porque não deslocar o produto para a direita? 14 de Março de 2005 Arquitectura de Computadores 2004/05 17 - Aula 5

Multiplicação l básica (11) Só estamos a somar N bits (e não 2N bits) Os outros bits são 0 Valor anterior = 00000110 Multiplicando l 0 0 0 1 0 0 0 0 Multiplicador Somador 2N bits x x x 1 0 0 0 1 0 1 1 0 Se 1, adiciona, senão não faz nada Produto parcial 14 de Março de 2005 Arquitectura de Computadores 2004/05 18 - Aula 5

Multiplicação l melhorada (1) Lembram-se do algoritmo da multiplicação básica? 0 0 0 0 0 0 0 A 3 A 2 A 1 A 0 B 0 A 3 A 2 A 1 A 0 B 1 A 3 A 2 A 1 A 0 B 2 A 3 A 2 A 1 A 0 B 3 P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 14 de Março de 2005 Arquitectura de Computadores 2004/05 19 - Aula 5

Multiplicação l melhorada (2) Passamos a implementar este outro algoritmo O multiplicando não desloca, o que desloca é o produto parcial 0 0 0 0 A 3 A 2 A 1 A 0 B 0 A 3 A 2 A 1 A 0 B 1 A 3 A 2 A 1 A 0 B 2 A 3 A 2 A 1 A 0 B 3 P 7 P 6 P 5 P 4 P 3 P 2 P 1 P 0 14 de Março de 2005 Arquitectura de Computadores 2004/05 20 - Aula 5

Multiplicação l melhorada (3) Para N = 64 bits, por exemplo Multiplicando 64 bits Cout ALU. 64 bits Multiplicador 64 bits Shift hf Right Shift Right Produto 128 bits Write Controlo 14 de Março de 2005 Arquitectura de Computadores 2004/05 21 - Aula 5

Multiplicação l melhorada (4) 3 x 2 = 6 Start Product Multiplier Multiplicand Multiplier0 = 1 1.Test 0000 0000 0011 0010 Multiplier0 1: 0010 0000 0011 0010 2: 0001 0000 0011 0010 3: 0001 0000 0001 0010 1: 0011 0000 0001 0010 1a. Add multiplicand to the left half of product & 2: 0001 1000 0001 0010 place the result in the left half of Product register 3: 0001 1000 0000 0010 1: 0001 1000 0000 0010 2: 0000 1100 0000 0010 3: 0000 1100 0000 0010 2. Shift the Product register right 1 bit 1: 0000 1100 0000 0010 2: 0000 0110 0000 0010 3: 0000 0110 0000 0010 3. Shift the Multiplier register right 1 bit. Multiplier0 = 0 0000 0110 0000 0010 64rd No: < 64 repetitions repetition? Yes: 64 repetitions Done 14 de Março de 2005 Arquitectura de Computadores 2004/05 22 - Aula 5

Multiplicação l melhorada (5) Passo 1: como o LSB do multiplicador é 1, soma e, em seguida, desloca o produto parcial e o multiplicador para a direita Só os 4 MSB Valor inicial = 00000000 Multiplicando 0 0 1 0 Somador N bits 0 0 1 0 0 0 0 0 Produto parcial ADICIONA Multiplicador 1 0 1 1 Se 1, adiciona, senão não faz nada 14 de Março de 2005 Arquitectura de Computadores 2004/05 23 - Aula 5

Multiplicação l melhorada (6) Passo 1: (cont.) Multiplicando 0 0 1 0 O MSB a 0 do produto parcial é o carry out da soma Somador N bits Multiplicador x 1 0 1 0 0 0 1 0 0 0 0 Produto parcial Desloca 1 bit para a direita Desloca 1 bit para a direita 14 de Março de 2005 Arquitectura de Computadores 2004/05 24 - Aula 5

Multiplicação l melhorada (7) Passo 2: idêntico ao passo 1 Valor anterior = 0001 Multiplicando 0 0 1 0 Somador N bits 0 0 1 1 0 0 0 0 Produto parcial ADICIONA Multiplicador x 1 0 1 Se 1, adiciona, senão não faz nada 14 de Março de 2005 Arquitectura de Computadores 2004/05 25 - Aula 5

Multiplicação l melhorada (8) Passo 2: (cont.) Multiplicando 0 0 1 0 Somador N bits Multiplicador x x 1 0 0 0 0 1 1 0 0 0 Produto parcial Desloca 1 bit para a direita Desloca 1 bit para a direita 14 de Março de 2005 Arquitectura de Computadores 2004/05 26 - Aula 5

Multiplicação l melhorada (9) Passo 3: não adiciona Valor anterior = 0001 Multiplicando 0 0 1 0 Somador N bits Multiplicador x x 1 0 0 0 0 1 1 0 0 0 Produto parcial NÃO ADICIONA Se 1, adiciona, senão não faz nada 14 de Março de 2005 Arquitectura de Computadores 2004/05 27 - Aula 5

Multiplicação l melhorada (10) Passo 3: (cont.) Multiplicando 0 0 1 0 Somador N bits Multiplicador x x x 1 0 0 0 0 1 1 0 0 Produto parcial Desloca 1 bit para a direita Desloca 1 bit para a direita 14 de Março de 2005 Arquitectura de Computadores 2004/05 28 - Aula 5

Multiplicação l melhorada (11) Passo 4: idêntico aos passos 1 e 2 Valor anterior = 0000 Multiplicando 0 0 1 0 Somador N bits 0 0 1 0 1 1 0 0 Produto parcial ADICIONA Multiplicador x x x 1 Se 1, adiciona, senão não faz nada 14 de Março de 2005 Arquitectura de Computadores 2004/05 29 - Aula 5

Multiplicação l melhorada (12) Passo 4: (cont.) Multiplicando 0 0 1 0 Somador N bits Multiplicador x x x x 0 0 0 1 0 1 1 0 Produto final Desloca 1 bit para a direita Desloca 1 bit para a direita 14 de Março de 2005 Arquitectura de Computadores 2004/05 30 - Aula 5

Multiplicação l melhorada (13) Comentário O registo com os produtos parciais ainda tem 0s desperdiçados, em número que coincide exactamente com a dimensão do multiplicador 14 de Março de 2005 Arquitectura de Computadores 2004/05 31 - Aula 5

Multiplicação l melhorada (14) Note-se o desperdício! dí Product Multiplier Multiplicand 0000 0000 0011 0010 1: 0010 0000 0011 0010 2: 0001 0000 0011 0010 3: 0001 0000 0001 0010 1: 0011 0000 0001 0010 2: 0001 1000 0001 0010 3: 0001 1000 0000 0010 1: 0001 1000 0000 0010 2: 0000 1100 0000 0010 3: 0000 1100 0000 0010 1: 0000 1100 0000 0010 2: 0000 0110 0000 0010 3: 0000 0110 0000 0010 0000 0110 0000 0010 Start Multiplier0 = 1 1.Test Multiplier0 Multiplier0 = 0 1a. Add multiplicand to the left half of product & place the result in the left half of Product register 2. Shift the Product register right 1 bit 3. Shift the Multiplier register right 1 bit. 64nd No: < 64 repetitions repetition? Yes: 64 repetitions Done 14 de Março de 2005 Arquitectura de Computadores 2004/05 32 - Aula 5

Multiplicação l melhorada (15) Porque não colocar inicialmente o multiplicador na parte baixa do produto? O bit do multiplicador a testar (LSB) é agora também o LSB do produto A cada deslocamento do produto, o LSB do multiplicador vem ejectado e o registo com o produto abre espaço no MSB para o transporta da adição Menos hardware 14 de Março de 2005 Arquitectura de Computadores 2004/05 33 - Aula 5

Multiplicação l versão 3 (1) Usamos menos hardware Não existe o registo multiplicador Multiplicando 64 bits ALU 64 bits Shift Right Produto Multiplicador 128 bits Wit Write Control 14 de Março de 2005 Arquitectura de Computadores 2004/05 34 - Aula 5

Multiplicação l versão 3 (2) Start Product0 = 1 1. Test Product0 Product0 = 0 1a. Add multiplicand to the left half of product & place the result in the left half of Product register 2. Shift the Product register right 1 bit. 64rd repetition? No: < 64 repetitions Yes: 64 repetitions Done 14 de Março de 2005 Arquitectura de Computadores 2004/05 35 - Aula 5

Multiplicação l em compl. para 2 O que fazer para multiplicar números com sinal, em complemento para 2? Solução mais simples: tornar o multiplicando e o multiplicador positivos e multiplicá-los como anteriormente complementar para 2 o produto final se os operandos tinham sinais diferentes deixar de fora o bit de sinal (executar apenas 63 iterações) Outra solução: usar o algoritmo de Booth Utiliza o hardware anterior Poupa ciclos de relógio porque toma conta de sequências de bits a 1 no multiplicador 14 de Março de 2005 Arquitectura de Computadores 2004/05 36 - Aula 5

Algoritmo de Booth (1) Toma conta de sequências de bits a 1 no multiplicador a a a a a a a a x 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 P r o d u t o f i n a l 14 de Março de 2005 Arquitectura de Computadores 2004/05 37 - Aula 5

Algoritmo de Booth (2) Na multiplicação anterior, a multiplicação por 15 (1111) é substituída por uma multiplicação por 16 (só deslocamentos) seguida de uma subtracção de 1 15 = 16-1 00111100 = 01000000-00000100 14 de Março de 2005 Arquitectura de Computadores 2004/05 38 - Aula 5

Algoritmo de Booth (3) 00111100 = 01000000-00000100 a a a a a a a a x 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - a a a a a a a a a a a a a a a a 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 P r o d u t o f i n a l 14 de Março de 2005 Arquitectura de Computadores 2004/05 39 - Aula 5

Algoritmo de Booth (4) Meio da sequência Meio Fim da sequência 0 1 1 1 1 0 Princípio da sequência Bit corrente Bit à direita Explicação Exemplo Op 1 0 Início seq. de 1s 0001111000 sub 1 1 Meio seq. de 1s 0001111000 nada 0 1 Fim seq. de 1s 0001111000 add 0 0 Meio seq. de 0s 0001111000 nada Originalmente pensado para rapidez (quando deslocs. mais rápidos que adições) Faz uma subtracção quando encontra o primeiro 1 no multiplicador (caminhando do LSB para o MSB); mais tarde soma quando encontra o primeiro 0 14 de Março de 2005 Arquitectura de Computadores 2004/05 40 - Aula 5

Algoritmo de Booth (5) Exemplo: +2 x (+7) = +14 +2 = m = multiplicando +7 = multiplicador 0 suplementar Operação Multiplicando Produto próximo? nota 0. Valores iniciais 0010 0000 0111 0 10 -> sub 1a. P = P-m 0010 1110 0111 0 1b. Desloca dir. 0010 1111 0011 1 11 -> nop replica sinal 2a. Nop 0010 1111 0011 1 2b. Desloca dir. 0010 1111 1001 1 11 -> nop replica sinal 3a. Nop 0010 1111 1001 1 3b. Desloca dir. 0010 1111 1100 1 01 -> add replica sinal 4a. P = P+m 0010 0001 1100 1 4b. Desloca dir. 0010 0000 1110 0 fim replica sinal +14 14 de Março de 2005 Arquitectura de Computadores 2004/05 41 - Aula 5

Algoritmo de Booth (6) Exemplo: +2 x (-3) = -6 +2-3 0 suplementar Operação Multiplicando Produto próximo? nota 0. Valores iniciais 0010 0000 1101 0 10 -> sub 1a. P = P-m 0010 1110 1101 0 1b. Desloca dir. 0010 1111 0110 1 01 -> add replica sinal 2a. P = P+m 0010 0001 0110 1 2b. Desloca dir. 0010 0000 1011 0 10 -> sub replica sinal 3a. P = P-m 0010 1110 1011 0 3b. Desloca dir. 0010 1111 0101 1 11 -> nop replica sinal 4a. nop 0010 1111 0101 1 4b. Desloca dir. 0010 1111 1010 1 fim replica sinal 14 de Março de 2005 Arquitectura de Computadores 2004/05 42 - Aula 5-6

Algoritmo de Booth (7) Naturalmente, com um padrão de 0s e de 1s alternados, 1 0 1 0 1 0 1 0 1 0 soma subtrai subtrai soma o algoritmo de Booth está sempre a subtrair e somar Não se ganha nada em relação a algoritmos que não levem em linha de conta as sequências de 1s O algoritmo de Booth é tanto mais eficaz quanto mais longas forem as sequências de 1s seguidos 14 de Março de 2005 Arquitectura de Computadores 2004/05 43 - Aula 5

Divisão básica (1) Correspondência com a multiplicação: desloca e subtrai Aproximadamente o mesmo hardware Exemplo (sem sinal): 1001010/1000 = 1001, resto 10 Em decimal: 74/8 = 9, resto 2 1001 010 1000-1000 1001 1 0 1 01 1 010-1 000 10 14 de Março de 2005 Arquitectura de Computadores 2004/05 44 - Aula 5

Divisão básica (2) Cada bit do quociente é 1 ou 0 Faz-se 1 * divisor = divisor, ou 0 * divisor = 0 Dividendo = Quociente x Divisor + Resto => Dividendo = Quociente + Divisor 3 versões da divisão, tal como na multiplicação Os algoritmos que vamos estudar são do tipo restoring division Há outros, que não estudamos, que são do tipo non- restoring division Começamos pela divisão básica, admitindo dividendos com 128 bits 14 de Março de 2005 Arquitectura de Computadores 2004/05 45 - Aula 5

Divisão básica (3) Registo divisor 128 bits, ALU 128 bits, registo do resto 128 bits (inicialmente também dividendo), registo quociente 64 bits Divisor 128 bits Shift Right ALU 128 bits Quociente 64 bits Shift Left Resto 128 bits Write Controlo 14 de Março de 2005 Arquitectura de Computadores 2004/05 46 - Aula 5

Divisão básica (4) N+1 iterações para n bits no quociente e no resto Start: Place Dividend in Remainder 1. Subtract the Divisor register from the Remainder register, and place the result in the Remainder register. 2a. Shift the Quotient register to the left setting the new rightmost bit to 1. Remainder 0 Test Remainder < 0 Remainder 2b. Restore the original value by adding the Divisor register to the Remainder register, & place the sum in the Remainder register. Also shift the Quotient register to the left, setting the new least significant bit to 0. 3. Shift the Divisor register right1 bit. Daqui vem o nome de restoring division Este algoritmo precisa de n+1 iterações n+1 repetition? No: < n+1 repetitions Yes: n+1 repetitions (n = 4 here) 14 de Março de 2005 Done Arquitectura de Computadores 2004/05 47 - Aula 5

Divisão básica (5) O computador não tem maneira de saber se o divisor é ou não menor do que o dividendo Se for menor, deve meter um 1 no quociente Se for maior, deve meter um 0 Então, começa por fazer a subtracção Dividendo Divisor no passo 1 e coloca o resultado no Resto Se o resultado der positivo, o Divisor era mais pequeno ou igual ao Dividendo, e gera um 1 no Quociente (passo 2a) Se o resultado der negativo, restaura o valor inicial do Resto e gera um 0 no Quociente (passo 2b) O Divisor é deslocado para a direita e passa-se se ao passo seguinte 14 de Março de 2005 Arquitectura de Computadores 2004/05 48 - Aula 5

Divisão básica (6) Resto Quociente Divisor 0000 0111 0000 0010 0000 1: 1110 0111 0000 0010 0000 2: 0000 0111 0000 0010 0000 3: 0000 0111 0000 0001 0000 1: 1111 0111 0000 0001 0000 2: 0000 0111 0000 0001 0000 3: 0000 0111 0000 0000 1000 1: 1111 1111 0000 0000 1000 2: 0000 0111 0000 0000 1000 3: 0000 0111 0000 0000 0100 1: 0000 0011 0000 0000 0100 2: 0000 0011 0001 0000 0100 3: 0000 0011 0001 0000 0010 1: 0000 0001 0001 0000 0010 2: 0000 0001 0011 0000 0010 3: 0000 0001 0011 0000 0001 7/2 = 3, resto 1 (números sem sinal) 5 iterações para 4 bits 14 de Março de 2005 Arquitectura de Computadores 2004/05 49 - Aula 5

Divisão básica (7) Comentários Metade dos bits do divisor sempre a 0 => Metade do somador é desperdiçado Metade do divisor é desperdiçado 14 de Março de 2005 Arquitectura de Computadores 2004/05 50 - Aula 5

Divisão básica (8) Resto Quociente Divisor 0000 0111 0000 0010 0000 1: 1110 0111 0000 0010 0000 2: 0000 0111 0000 0010 0000 3: 0000 0111 0000 0001 0000 1: 1111 0111 0000 0001 0000 2: 0000 0111 0000 0001 0000 3: 0000 0111 0000 0000 1000 1: 1111 1111 0000 0000 1000 2: 0000 0111 0000 0000 1000 3: 0000 0111 0000 0000 0100 1: 0000 0011 0000 0000 0100 2: 0000 0011 0001 0000 0100 3: 0000 0011 0001 0000 0010 1: 0000 0001 0001 0000 0010 2: 0000 0001 0011 0000 0010 3: 0000 0001 0011 0000 0001 7/2 = 3, resto 1 (números sem sinal) Notar os bits desperdiçados! 14 de Março de 2005 Arquitectura de Computadores 2004/05 51 - Aula 5

Divisão básica (9) Em vez de deslocar o divisor para direita, deslocar o resto para a esquerda? O primeiro passo não pode produzir um 1 no quociente (é sempre uma subtracção para 0) => Trocar a ordem para deslocar primeiro e subtrair depois P i h i ã Premite ganhar uma iteração Número de iterações vem para n se tivermos n bits 14 de Março de 2005 Arquitectura de Computadores 2004/05 52 - Aula 5

Divisão melhorada (1) Só tem n iterações Divisor e ALU com metade dos bits Deslocamentos sempre para a esquerda Divisor 64 bits 64-bit ALU Quotient 64 bits Shift Left Remainder 128 bits Shift Left Write Control 14 de Março de 2005 Arquitectura de Computadores 2004/05 53 - Aula 5

Divisão melhorada (2) Start: Place Dividend in Remainder 1. Shift the Remainder register left 1 bit. 2. Subtract t the Divisor i register from the left half of the Remainder register, & place the result in the left half of the Remainder register. Remainder 0 Test Remainder < 0 Remainder 3a. Shift the Quotient register 3b. Restore the original value by adding the Divisor register to the left half of the Remainder register, to the left setting &place the sum in the left half of the Remainder the new rightmost register. Also shift the Quotient register to the left, bit to 1. setting the new least significant bit to 0. nth No: < n repetitions repetition? Yes: n repetitions Done 14 de Março de 2005 Arquitectura de Computadores 2004/05 54 - Aula 5

Divisão versão 3(1) Comentários Eliminar o registo Quociente combinando-o com o Resto Algoritmo modificado vem no acetato a seguir 14 de Março de 2005 Arquitectura de Computadores 2004/05 55 - Aula 5

Divisão versão 3 (2) Divisor 64 bits 64-bit ALU Resto (Quotient) 128 bits Shift Left/Right Write Control 14 de Março de 2005 Arquitectura de Computadores 2004/05 56 - Aula 5

Divisão versão 3 (2) Start: Place Dividend in Remainder 1. Shift the Remainder register left 1 bit. 2. Subtract the Divisor register from the left half of the Remainder register, & place the result in the left half of the Remainder register. Remainder 0 Test Remainder < 0 Remainder 3a. Shift the 3b. Restore the original value by adding the Divisor Remainder register register to the left half of the Remainder register, to the left setting &place the sum in the left half of the Remainder the new rightmost register. Also shift the Remainder register to the bit to 1. left, setting the new least significant bit to 0. nth repetition? No: < n repetitions Yes: n repetitions (n = 4 here) Done. Shift left half of Remainder right 1 bit. 14 de Março de 2005 Arquitectura de Computadores 2004/05 57 - Aula 5

Pó Próxima aula Números em vírgula flutuante Formatos dos números em vírgula fixa e em vírgula flutuante A norma IEEE 754 Normalizações Expoentes Zeros e infinitos Valores especiais i Denormals Operações fundamentais em vírgula flutuante 14 de Março de 2005 Arquitectura de Computadores 2004/05 58 - Aula 5