1 / 74

Aritmética Computacional

Aritmética Computacional. The complexity is in eye of the observer... As much as the object allows. Introdução. Humanos: sistema decimal. Computadores: sistema binário. Como representar números negativos e números reais? Qual é o maior número representável numa palavra de computador?

hasad
Download Presentation

Aritmética Computacional

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Aritmética Computacional The complexity is in eye of the observer... As much as the object allows.

  2. Introdução • Humanos: sistema decimal. • Computadores: sistema binário. • Como representar números negativos e números reais? • Qual é o maior número representável numa palavra de computador? • O que acontece quando o resultado é maior do que a capacidade do computador?

  3. Conteúdo • Números com sinal e números sem sinal • Adição e subtração • Operações lógicas • Construção de uma unidade aritmética lógica • Multiplicação • Divisão • Operações em ponto flutuante • Lendas e falhas • Considerações Finais

  4. Números com sinal e números sem sinal 1

  5. 0 0 0 0 1 0 1 1 Bit Mais Significativo (MSB) Bit Menos Significativo (LSB) Números com Sinal e Números sem Sinal • Base 10: • 2543(10)=2103+5102+4101+3100(10) • Base 2: • 1011(2)=123+022+121+120=11(10) • Representação no Z80 (8 bits)

  6. Faixa de números sem sinal para 8 bits: 0 a 256-1 • 0000 0000(2) = 0(10) • 0000 0001(2) = 1(10) • 0000 0010(2) = 2(10) • ... • 1111 1100(2) = 252(10) • 1111 1101(2) = 253(10) • 1111 1110(2) = 254(10) • 1111 1111(2) = 255(10)

  7. Representação de números • Números reais: infinitos. • No computador: finitos. • Maioria: grande quantidade de zeros à esquerda. • Computador: pode lidar com números até um certo tamanho. • Overflow: tratado pelo sistema operacional. • No computador: é preciso representar números com sinal. • Solução: usar 1 bit (sinal magnitude). • Primeira tentativa: o bit mais significativos (MSB) é usado para sinal. • Problema: duas representações para o zero • Solução mais usada: complemento a 2

  8. Complemento a 2 • A regra baseia-se no fato de que a soma de um número com sua representação invertida deve ser -1:

  9. 000 001 111 110 010 011 101 100 Faixa de valores em complemento a 2 para 3 bits 0 1 -1 -2 2 3 -3 -4

  10. X = 1111 0111 + 1 Complemento a 2: regra prática • Considere X = 0000 1000, o complemento a 2 de X será: -X = 1111 1000

  11. Interface Hardware/Software • Endereços: sempre positivos • Os números vão de 0 a 27FF (Z80), e não são nunca negativos. • Em C: “int” e “unsigned int”.

  12. Exercícios • Converta -15(10) para binário com representação em sinal/magnitude (16 bits). • Converta -15(10) para binário com representação em complemento a 2 (16 bits). • Qual é o número, em decimal, representado em complemento a 2 por 1010 0011(2)? • Usando complemento a 2 qual é a faixa de números que podem ser representados com 8 bits?

  13. Adição e Subtração 2

  14. Adição e Subtração • No computador: soma semelhante à soma no sistema decimal. • Soma: soma cada bit, mais o vai-um.

  15. Subtração com complemento a 2 0000 0111 0000 0110 0000 0111 0000 0110 0000 0111 1111 1010 - + adição subtração + 0000 1101 0000 0001 0000 0001 Adição e Subtração (8 bits) • 6(10) = 0000 0110(2) • 7(10) = 0000 0111(2)

  16. Overflow • Ocorre sempre que o resultado de uma operação não pode ser representado no hardware disponível. • Se um número for negativo, e o outro positivo, não ocorrerá overflow.

  17. positivo positivo negativo overflow Exemplo de overflowAdição de 2 operandos positivos (8 bits) • Isto significa que o resultado está correto se o bit de sinal for ignorado 0100 0110 0110 0000 + 1010 0110

  18. negativo negativo positivo carry overflow Exemplo de overflowAdição de 2 operandos negativos (8 bits) • Isto significa que o resultado é negativo e está em complemento a 2 1000 0000 1010 0000 + 1 0010 0000

  19. positivo negativo negativo Exemplo de overflowAdição de operandos com sinais opostos (8 bits) • Não ocorre overflow, o resultado é negativo e está em complemento a 2 0100 0000 1010 0000 + 1110 0000

  20. positivo negativo carry positivo Exemplo de overflowAdição de operandos com sinais opostos (8 bits) • Não ocorre overflow, o carry é ignorado e o resultado é positivo 0110 0000 1100 0000 + 1 0010 0000

  21. Interface Hardware/Software • Na ocorrência de overflow: a máquina precisa decidir como tratá-lo. • Linguagem C: não toma conhecimento do overflows. A tarefa é do programador. • FORTRAN: trata o overflow

  22. Exercícios • Faça as operações aritméticas abaixo utilizando números binários de 8 bits e complemento a 2: • +9 + 4 • +9 - 4 • -9 + 4 • -9 - 4

  23. Operações Lógicas 3

  24. Operações Lógicas • Em muitas aplicações é necessário processar bits isolados dentro de uma palavra  operações lógicas • Shifts: deslocamento à esquerda ou à direita  instruções rlc, rrc, rl, rr • Ver apostila de laboratório: Aula 06 – Instruções de Rotação e Funções

  25. Operações AND e OR • Operação AND: atua bit a bit, deixando 1 como resultado somente no caso de ambos os bits correspondentes dos operandos serem 1 (aplicação de máscara) • Operação OR: também atua bit a bit colocando 1 no resultado se qualquer um dos bits correspondentes do operando for 1.

  26. Construção de uma Unidade Aritmética Lógica 4

  27. Introdução • Representa os músculos do computador: realiza operações aritméticas como a adição e a subtração ou operações lógicas como AND e OR • A partir de agora mostrar-se-á como construir uma UAL para realizar as quatro operações acima

  28. c a c a b c a b d 0 a c b 1 Blocos Construtivos Básicos NOT (Inversora) AND OR MultiplexadorSe d==0, c=a senão c=b

  29. Uma UAL de 1 Bit • Unidade lógica de 1 bit: • Operação = 0 ou 1  AND ou OR.

  30. Somador de 1 bit • Soma A + B + “vem 1” • Gera Resultado e “vai um” • Tabela Verdade:

  31. + Exercício • Gerar a unidade lógica a seguir: CarryIn a Soma b CarryOut

  32. UAL Simples de 1 bit

  33. Exercícios • Alterar a UAL anterior para que ela gere o valor 0. Dica: a maneira mais fácil é expandir o multiplexador controlado pela linha Operação. • Como projetar uma UAL de 32 bits utilizando uma UAL de 1 bit?

  34. UAL de 32 bits

  35. Subtração • A subtração é obtida somando-se o minuendo ao complemento a 2 do subtraendo, ou seja, • O circuito ao lado inverte o valor de b. Falta ainda somar 1 ao valor de b invertido. • Como fazê-lo?

  36. Subtração • Na soma o primeiro CarryIn (vem 1) é 0. • O que acontece de fizermos o primeiro CarryIn = 1?

  37. Overflow • Como fazer a detecção de overflow? • Leia o tópico “Adaptação da UAL de 32 bits para o MIPS” e faça o exercício 4.23 do livro texto.

  38. Símbolo Geral da UAL

  39. Problema • Qual é o problema de uma UAL projetada como a anterior?

  40. Carry Lookahead • Com que velocidade podemos somar dois operandos de 32 bits? • Observe que as entradas a e b podem ser perfeitamente determinadas a qualquer tempo, mas a entrada CarryIn de um determinado somador de 1 bit depende do resultado da operação realizada no somador de 1 bit vizinho. • Solução: • CarryIn1=B0CarryIn0+a0CarryIn0+a0b0 ou • C1=b0c0+a0.c0+a0b0 • C2=b1c1+a1c1+a0b0

  41. Carry Lookahead • Problema deste método: circuito ainda complexo para cálculos de muitos bits e portanto caro. • Qual a solução? • Método de propagador e gerador. Veja livro texto.

  42. Multiplicação 5

  43. Exemplo: como na prática multiplicando 1000 x 1001 1000 0000 0000 1000____ 1001000 multiplicador • Número de dígitos: multiplicando + multiplicador. • 32 bits x 32 bits = 64 bits. produto

  44. Algoritmo • Como na prática • Simplesmente coloque um cópia do multiplicando (1 x multiplicando) no lugar apropriado, se o digito do multiplicando for igual a 1, ou • Coloque 0 (0 x multiplicando) no lugar apropriado, se o digito do multiplicando for igual a 0; • Veremos a seguir 3 versões do algoritmo de multiplicação para 32 bits (32 x 32 bits)

  45. Algoritmo: 1ª Versão início 1. teste do Multiplicador0 Multiplicador0=1 Multiplicador0=0 1a. Produto = Produto + Multiplicando 2. desloque Multiplicando 1 bit à esquerda 3. desloque Multiplicador 1 bit à direita não 32 repetições? sim Fim

  46. Hardware: 1ª Versão

  47. Exercício • Usando números de 4 bits, com o intuito de economizar espaço, multiplique 210 por 310 ou 00102 por 00112. • Valores iniciais: • Multiplicando = 0000 0010 • Multiplicador = 0011 • Produto = 0000 0000

  48. Desvantagens • UAL de 64 bits. • 2 registradores de 64 bits • Próxima versão: • Metade dos bits do multiplicando da primeira versão são sempre zero, de modo que somente metade deles poderia conter informações úteis. A segunda versão utiliza-se desta informação para melhorar a performance da multiplicação.

  49. Algoritmo: 2ª Versão início 1. teste do Multiplicador0 Multiplicador0=1 Multiplicador0=0 1a. Some o multiplicando à metade esquerda do produto 2. desloque o registrador de Produto 1 bit à direita 3. desloque o registrador Multiplicador 1 bit à direita sim não 32 repetições? Fim

  50. Hardware: 2ª Versão

More Related