Organiza
Organiza
ç
ç
ão e Arquitetura
ão e Arquitetura
de computadores
de computadores
Prof. Dr. Luciano José Senger
Aritmética computacional
Representa
Representaç
ção de valores
ão de valores
• Os valores expressos em números inteiros e fracionários
necessitam ser representados de forma eficiente em
sistemas computacionais, através de palavras binárias
• No hardware, os números são finitos, pois devem ser
mapeados em palavras de tamanho fixo
• Além disso, o hardware necessita trabalhar com número
com sinal (negativos e positivos)
– 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
– Notação em excesso (números em ponto flutuante)
• Faixa de valores em complemento de 2 para 3 bits
• Interface Hardware/Software
– Endereços: sempre positivos
– Em C: “int” e “unsigned int”
Representa
Representaç
ção de valores
ão de valores
0
-4
2
-2
1
3
-3
-1
111
101
011
001
010
110
100
000
Representa
Representaç
ção de valores
ão de valores
• Como o computador trabalha com bits, todos os
valores precisam ser convertidos para uma
representação interna que seja eficiente na
economia dos bits e na realização de operações
sobre os valores
• Questão: Que tipo de variável que pode conter
1.000.000.000 (dec) ocupa mais espaço na
memória?
– int em C
– String em C
– String em java (que usa Unicode)
Adi
Adiç
ção
ão
• Somador ripple carry (propagação de vai-um)
– O processo de somar as entradas de cada bit é rápido
– O problema é que o a propagação do excedente (carry)
leva um tempo longo para atravessar o circuito:
números maiores levam mais tempo para serem
somados.
Adi
Adiç
ção de alto desempenho
ão de alto desempenho
• Carry lookahead adder (somador com previsão de
excedente)
Adi
Adiç
ção de alto desempenho
ão de alto desempenho
• Carry lookahead adder (somador com previsão de
excedente)
Adi
Adiç
ção de alto desempenho
ão de alto desempenho
• Carry lookahead adder (somador com previsão de
excedente)
Adi
Adiç
ção de alto desempenho
ão de alto desempenho
• Hardware para adição e subtração
Overflow
Overflow
• Detecção de overflow
• Ocorre sempre que o resultado de uma operação não pode ser representado no hardware disponível.
<0 <0 >=0 A-B >=0 >=0 <0 A-B >=0 <0 <0 A+B <0 >=0 >= 0 A+B Resultado Operando B Operando A Operação
• Se um número for negativo, e o outro positivo, não ocorrerá overflow.
Overflow
Overflow
• Interface hardware/software
– O MIPS detecta um overflow como uma exceção,
também chamada de interrupção em muitos
computadores
• Uma exceção ou interrupção corresponde basicamente a uma chamada de procedimento não planejada
• O endereço da instrução que gerou o overflow é salvo em registrador especial, e o computador desvia a execução para um endereço pré-definido, para invocar a rotina apropriada para essa exceção
• O MIPS inclui um registrador, chamado de contador de programa de exceção (EPC) para conter o endereço da instrução que causou a exceção. A instrução move from system control (mfc0) é usada para copiar o EPC para um registrador de uso geral, de modo que o software do MIPS tem a opção de retornar à instrução problemática por meio de uma instrução jump register
Adi
Adiç
ção
ão
• Interface hardware/software
– Na ocorrência de overflow a máquina precisa decidir
como tratá-lo.
– Linguagem C: não toma conhecimento do overflows,
assim o overflow deve ser tratado pelo programador.
– Outras linguagens, como ADA e FORTRAN, tratam o
overflow
– Na arquitetura IA-32, o registrador de flags notifica se o
resultado de uma operação aritmética gerou ou não um
overflow; cabe ao software utilizar essa informação para
o tratamento do overflow
Multiplica
Multiplicaç
ção
ão
• Multiplicação
– A multiplicação, ao contrário da soma e da subtração, é
uma operação complexa
– Realizada através da soma dos produtos parciais para
cada dígito do multiplicador
– A soma deve ser realizada observando que cada
produto parcial tem uma posição (deslocamento) na
soma que deve ser respeitada
– A multiplicação de números inteiros binários de n bits
resulta em um produto com até 2n bits de tamanho
Multiplica
Multiplicaç
ção
ão
1011 Multiplicando (11 decimal)
x 1101 Multiplicador (13 decimal)
1011 produtos parciais
0000 Nota: se o bit do multiplicador
1011
for igual a 1, copia-se o
1011
multiplicando, senão 0
10001111 produto (143 decimal)
Nota: o resultado é expresso através de um
número que tem o dobro do tamanho dos
termos (p.e. se os termos têm 4 bits, o
resultado deve ser expresso em 8 bits)
Multiplica
Multiplicaç
ção
ão
• Hardware de multiplicação
Multiplica
Multiplicaç
ção
ão
• Exemplo: Multiplicar 1011 por 1101
Multiplica
Multiplicaç
ção
ão
• Diagrama de fluxo de dados para a multiplicação
Multiplica
Multiplicaç
ção mais r
ão mais rá
ápida
pida
• Replicação de somadores
– Não importa se o multiplicando deve ser somado ou não, isso é conhecido no início da multiplicação analisando cada um dos 32 bits do multiplicador – Multiplicações mais rápidas são
possíveis basicamente fornecendo um somador de 32 bits para cada bit do multiplicador: uma entrada é o AND do multiplicando pelo bit do multiplicador e a outra é a saída do somador anterior
Multiplica
Multiplicaç
ção mais r
ão mais rá
ápida
pida
• Replicação de somadores
Multiplica
Multiplicaç
ção
ão
• Números negativos
– a técnica/hardware anterior não funciona para números
negativos, expressos em complemento de 2
– Primeira solução
• Converter o número negativo para um número positivo • Multiplicar como descrito previamente
• Se os sinais dos termos iniciais forem diferentes, efetuar a representação do resultado através de um número negativo
– Segunda solução
• Algoritmo de Booth
Multiplica
Multiplicaç
ção
ão
• Diagrama de fluxo de dados para a multiplicação (Booth)
Multiplica
Multiplicaç
ção
ão
• Algoritmo de Booth
– O multiplicador e o multiplicando são armazenados nos registradores Q e M
– Existe um registrador de 1 bit, posicionado logicamente à direita do bit menos significativo (Q0) do registrador Q e designado como Q-1
– A e Q-1são inicializados com zero
– A lógica de controle examina os bits do multiplicador, um de cada vez – Quando o bit é examinado, observa-se o bit a sua direita: se esses dois bits
forem iguais (1-1 ou 0-0), então todos os bits dos registradores A, Q e Q-1
são deslocados 1 bit para a direita; se eles forem diferentes, o
multiplicando será somado ou subtraído do registrador A, dependendo se os dois bits são 0-1 ou 1-0, respectivamente
– Após a operação de adição ou subtração, ocorre o deslocamento de um bit para a direita, que é feito de tal maneira que o bit mais a esquerda de A, denominado de An-1, é deslocado para An-2, mas também permanece em
An-1
– Tal forma de deslocamento é necessária para preservar o sinal do número armazenado em A e Q; esses deslocamento é conhecido como
deslocamento aritmético, porque preserva o bit de sinal
Multiplica
Multiplicaç
ção
ão
• Exemplo: Multiplicar 0111 por 0011
Multiplica
Multiplicaç
ção
ão
Multiplica
Multiplicaç
ção
ão
Divisão
Divisão
• Algoritmo de divisão
– Mais complexo que o algoritmo de multiplicação
001111
1011
00001101
10010011
1011
001110
1011
1011
100
Quociente
Dividendo
Resto
Resto
Divisor
Divisão
Divisão
início Teste do Resto 2a. Desloque o Quociente 1 bit à esquerdaQ0 = 1
3. Desloque o Divisor 1 bit à direita
33 repetições? Fim Resto < 0 Resto>=0 não sim
1. Resto = Resto - Divisor
2b. Resto = Resto + Divisor Desloque o Quociente um 1 bit à esquerda
Q0 = 0
Ponto flutuante
Ponto flutuante
• Números reais não inteiros seguem a
representação em ponto flutuante
• Na notação em ponto flutuante, os números
seguem uma notação científica normalizada:
• Ocorrência de overflow e underflow
• Precisão simples (float)
s
expoente
mantissa
32 bits
1
8
23
E SF
N
=
(
−
1
)
×
×
2
Ponto flutuante
Ponto flutuante
• Formato duplo (double)
– Esses formatos estão de acordo com o padrão IEEE 754, encontrado em praticamente todos os computadores desde 1980
– Para colocar mais bits no significando, o IEEE 754 deixa explícito o bit 1 inicial nos números binários.
– Logo, o número tem 24 bits de largura na precisão simples e 53 bits na precisão dupla
– O valor de expoente 0 (reservado) indica o número zero
s
expoente
mantissa
64 bits
1
11
52
E SMantissa
N
=
(
−
1
)
(
1
+
)
×
2
Ponto flutuante
Ponto flutuante
• Codificação do padrão IEEE 754 para os números em ponto flutuante – Para facilitar a comparação entre valores, o bit de expoente é representado
no início da palavra; além disso, a representação em excesso de 127 para a precisão simples:
– -1: -1+127 = 126 – 1: 1+127 = 128
– O bias para o expoente é igual a 1023
not a number (NaN) nonzero 2047 nonzero 255 ±infinity 0 ±2047 0 ±255
±floating point number anything ±1-2046 anything ±1-254 ±denormalized number nonzero 0 nonzero 0 zero (0) 0 0 0 0 F (52) E (11) F (23) E (8) Objeto representado Precisão dupla Precisão simples ) (
2
)
1
(
)
1
(
SMantissa
E PesoN
−×
+
×
−
=
Ponto Flutuante
Ponto Flutuante
NaN NaN+∞
∞
∞
∞
-∞
∞
∞
∞
-0 +0+Denorm +Normalized -Denorm -Normalized• Faixas de representação
• Description exp frac Numeric Value
• Zero 00…00 00…00 0.0
• Smallest Pos. Denorm. 00…00 00…01 2– {23,52}X 2– {126,1022} – Single ≈ 1.4 X 10–45
– Double ≈≈≈≈4.9 X 10–324
• Largest Denormalized 00…00 11…11 (1.0 – εεεε) X 2– {126,1022} – Single ≈ 1.18 X 10–38
– Double ≈≈≈≈2.2 X 10–308
• Smallest Pos. Normalized 00…01 00…00 1.0 X 2– {126,1022} – Just larger than largest denormalized
• One 01…11 00…00 1.0 • Largest Normalized 11…10 11…11 (2.0 – εεεε) X 2{127,1023} – Single ≈ 3.4 X 1038 – Double ≈≈≈≈1.8 X 10308
Ponto Flutuante
Ponto Flutuante
exp E value 0 0000 000 n/a 0 0 0000 001 -6 1/512 0 0000 010 -6 2/512 … 0 0000 110 -6 6/512 0 0000 111 -6 7/512 0 0001 000 -6 8/512 0 0001 001 -6 9/512 … 0 0110 110 -1 28/32 0 0110 111 -1 30/32 0 0111 000 0 1 0 0111 001 0 36/32 0 0111 010 0 40/32 … 0 1110 110 7 224 0 1110 111 7 240 0 1111 000 n/a inf closest to zero largest denorm smallest norm closest to 1 below closest to 1 above largest norm Denormalized numbers Normalized numbersPadrão IEEE 754
Padrão IEEE 754
•
Exemplos:
1. Representar o número 0,7510em ponto flutuante e precisão
simples.
2. Representar o número -0,7510em ponto flutuante e dupla
precisão.
•
Convertendo para binário:
– 0,75 x 2 = 1,5 → 1 – 0,5 x 2 = 1,0 → 1 – -0,7510 = -0,112= -0,11 x 20= -1,1 x 2-1
•
Em precisão simples:
•
Resultado:
) (2
)
1
(
)
1
(
S EPesoMantissa
N
−×
+
×
−
=
Ponto Flutuante
Ponto Flutuante
• Converter a palavra abaixo em ponto flutuante
para número:
• Resposta
Adi
Adiç
ção e Multiplica
ão e Multiplicaç
ção em Ponto Flutuante
ão em Ponto Flutuante
Ponto Flutuante
Ponto Flutuante
• Na arquitetura MIPS:
– Adição simples e dupla: add.s e add.d – Subtração simples e dupla: sub.s e sub.d – Multiplicação simples e dupla: mult.s e mult.d
• Aritmética de precisão
– Ao contrário dos números inteiros, os números em ponto flutuante são aproximações dos valores reais
– O arredondamento exige bits adicionais
– O IEEE 754 mantém 2 bits extras à direita para adições intermediárias, chamados guarda e arredondamento – Exemplo: soma 2,56 x 10^0 + 2,34 x 10^2, supondo 3 dígitos
decimais significativos • 2,3400 + 0,0256 = 2,3656 • Arredondamento: 2,37
• Sem dígitos de guarda e arredondamento: • 2,34 + 0,02 = 2,36
Vida Real: ponto flutuante do IA
Vida Real: ponto flutuante do IA-
-32
32
• IA-32
– Início: de ponto flutuante 1987
– Arquitetura de pilha: operandos são colocados na pilha
e removidos para o processamento
– 80 bits são reservados para números em ponto flutuante
(formato estendido); não utilizado pelas linguagens de
programação tradicionais
s exp frac 0 63 64 78 79Considera
Consideraç
ções finais
ões finais
• Considerações
• Replicação de somadores: melhor desempenho
• Algoritmo de Booth
– Trata números negativos diretamente
– Blocos de 1s e 0s são ignorados, sendo feita, em média, apenas uma adição ou subtração por bloco
• Multiplicação e divisão
– Menos freqüentes• Ponto flutuante
– Aritmética complexa – Registradores específicos• Falácia:
– a adição em ponto flutuante é associativa; ou seja, x+(y+z)=(x+y)+z.