Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
Sistemas de Computação Práticas Laboratoriais
Semana 2
Prof. Bruno Medeiros Prof. Antonio Pina
Sumário
� Sistemas de numeração e conversão de bases
� Operações aritméticas e lógicas em base 2
� Representação binária de valores positivos e negativos � Sinal e amplitude � Complemento para 1
� Complemento para 2 � Representação por excesso
Sistemas de numeração
� Os números podem ser representados em diferentes sistemas de numeração � Humanos, normalmente usam um sistema de
numeração em base 10 � Os computadores, por serem dispositivos elétricos
utilizam dígitos binários (base 2), conhecidos por bits � 0 – sem corrente
� 1 – com corrente
Sistemas de numeração
� Conceito de ordem e base � Exemplo : 1532.6410
� A base determina o número de dígitos que podem ser utilizados � Base 10 – 10 dígitos (0..9)
� Base 2 – 2 dígitos (0, 1) � Base 16 – 16 dígitos (0.. 9, A .. F)
� A ordem é a posição de um dado dígito no número
Conversões entre bases (base b para base decimal)
� A conversão de um número numa base b para a base decimal obtém-se somando os resultados da multiplicação de cada dígito pela base elevada à ordem do dígito
� Exemplos: Conversão de base b para decimal
� 15326 (base 6) � = 1 * 63 + 5 * 62 + 3 * 61 + 2 * 60 = 41610
� 110110.0112 (base 2) � = 1 * 25 + 1 * 24 + 0 * 23 + 1 * 22 + 1 * 21 + 0 * 20 +
0 * 2-1 + 1 * 2-2 + 1 * 2-3 = 54.37510
Conversões entre bases (base decimal para base b)
� Na conversão de um numero na base decimal para uma base b, o processo mais direto é composto por duas partes
� Divisão sucessivas da parte inteira do número pela respectiva base, sendo os restos obtidos os dígitos a usar da base b
� Multiplicação sucessiva da parte fraccionária desse número pela respectiva base, sendo a parte inteira de cada um dos produtos, os dígitos da base b
Exemplo: decimal -> binário
� 235.37510 è 11101011.0112
235/2 = 117 Resto = 1 117/2 = 58 Resto = 1 58/2 = 29 Resto = 0 29/2 = 14 Resto = 1 14/2 = 7 Resto = 0 7/2 = 3 Resto = 1 3/2 = 1 Resto = 1 1/2 = 0 Resto = 1 0.375 * 2 = 0.75 P. Int. = 0 0.75 * 2 = 1.5 P. Int. = 1 0.5 * 2 = 1.0 P. Int. = 1
Subtrações sucessivas
� Processo de conversão de decimal para outra base � Método mais rápido do que o anterior � Necessita que se saiba a tabuada das potências de 2
� Como converter de decimal para binário � Procura-se a maior potência de 2 imediatamente
inferior ao valor do número decimal e subtrai-se essa potência ao nº decimal
� O expoente da potência indica que o número binário teria o bit 1 nessa ordem
� Com o resultado da subtração repete-se o processo até chegar ao resultado 0
Tabuada das potências de 2
20 = 1 27 = 128
21 = 2 28 = 256
22 = 4 29 = 512
23 = 8 210 = 1024 (1 k)
24 = 16 211 = 2048
25 = 32 …
26 = 64 220 = 210 * 210 = 1 Mega
Subtrações sucessivas
� Exemplo 1081.62510
1081.625 – 210 = 57.625
57.625 – 25 = 25.625
25.625 – 24 = 9.625
9.625 – 23 = 1.625
1.625 – 20 = 0.625
0.625 – 2-1 = 0.125
0.125 – 2-3 = 0
1 0 0 0 0 1 1 1 0 0 1 . 1 0 1
1024 512 256 128 64 32 16 8 4 2 1 0.5 0.25 0.125
210 29 28 27 26 25 24 23 22 21 20 2-1 2-2 2-3
Número de bits
� Os processadores utilizam um determinado número de bits para representar um número
� A quantidade de bits utilizados determina a gama de valores representáveis
� Para uma base b com n dígitos a gama de valores representáveis é bn
� Sendo n o número de bits utilizados, a gama de valores representáveis em binário usando n bits é 2n
Base hexadecimal
� Normalmente usada como alternativa de representação de valores binários � Conversão fácil entre hexadecimal e binário
� Facilita a leitura e diminui a probabilidade de erro
� Exemplo 431210 para hexadecimal 4312 / 16 = 269 Resto = 8 269 / 16 = 16 Resto = 13 (digito D)
16 / 16 = 1 Resto = 0 1 / 16 = 0 Resto = 1 Logo, 431210 = 10D816
Porque Hexadecimal?
� Fácil converter entre hexadecimal e binário
� Hexadecimal utiliza 16 dígitos (0,1,..,9, A, B, C, D, E, F) em que cada dígito representa um valor entre 0 e 15
� Cada conjunto de 4 bits representa também um valor no mesmo intervalo
� Como tirar partido desta característica ? � Na conversão de binário para hexadecimal podemos
agrupar os bits em grupos de 4, a partir do ponto binário, e converte-los para hexadecimal
� De hexadecimal para binário, converte-se cada dígito hexadecimal em binário usando 4 bits
Hexadecimal
� Exemplos : conversão entre hexadecimal e binário
2 A F (hexadecimal)
0010 1010 1111 (binário)
2AF16 = 0010101011112
1101 0101 1011 (binário)
D 5 B
1101010110112 = D5B16 (ou 0xD5B ou 0xd5b)
Operações aritméticas em base 2
� Adição binária � Regras
� 0 + 0 = 0
� 0 + 1 = 1
� 1 + 0 = 1
� 1 + 1 = 0 (e “vai 1” para o dígito de ordem superior)
� Exemplo 1012 + 0112
Subtração binária
� Regras � 0 – 0 = 0
� 0 – 1 = 1 (e “pede emprestado 1” para o dígito de ordem superior)
� 1 – 0 = 1 � 1 – 1 = 0
� Exemplo 1012 – 0112
Multiplicação binária
� Regras � 0 x 0 = 0 � 0 x 1 = 0 � 1 x 0 = 0 � 1 x 1 = 1 Exemplo 1012 x 0112
� Mesmo método do que o utilizado em decimal � A divisão binária também utilizada o mesmo método
utilizado em decimal com deslocamentos e subtrações
Números negativos
� Como representar o sinal negativo?
� Existe uma grande variedade de opções, das quais se destacam 4 � Sinal e amplitude/magnitude (S+M) � Complemento para 1
� Complemento para 2 � Notação em excesso
Sinal e amplitude
� Utiliza um bit para representar o sinal, o bit mais à esquerda � 0 representa valor positivo
� 1 representa valor negativo
� Problema desta representação é de que as adições não podem usar o método tradicional utilizado no decimal. O que dificulta a sua implementação ao nível do hardware
Complemento para 1
� Nesta representação invertem-se todos os bits de um número para representar o seu complementar
� Assim se converte um valor positivo em negativo, e vice-versa
� Quando o bit mais à esquerda é 0, esse valor é positivo, se for 1, então é negativo.
� Exemplo � 10010 = 011001002 (com 8 bits) � Invertendo todos os bits 100110112 = – 10010
Complemento para 2
� O problema do complemento para 1 é o facto de ex is t i rem 2 padrões de b i ts para o 0 . Nomeadamente 010 = 000000002 = 11111112
� Solução : representar os números em complemento para 2
� Para determinar o negativo de um número negam-se todos os seus bits e soma-se uma unidade.
� Uma forma mais rápida de calcular o complemento para 2 consistente em
� Fixar o primeiro bit a 1 a contar da direita para a esquerda, e inverter os restantes bits
Complemento para 2
� Exemplo 10010 = 011001002 (com 8 bits)
Invertendo todos os bits:
100110112
Somando uma unidade: 100110112 + 12 = 100111002 = – 10010
ou num só passo:
011001002 -> 100111002
Complemento para 2
� Características � O bit da esquerda indica o sinal
� O processo anterior serve para converter um número positivo para negativo e de negativo para positivo
� O zero tem uma única representação: todos os bits a 0
� A gama de valores que é possível representar com n bits é -2n-1 …. 2n-1 – 1
� Para n = 4 bits � -23 ... 23 – 1 = -8 ... 7
Complemento para 2
� Exemplo: Qual é o valor em decimal do binário 111001002 utilizando 8 bits ? � Como o bit à esquerda é 1 este número é negativo
� Invertendo todos os bits 000110112
� Somando uma unidade: � 000110112 + 12 = 000111002 = 2810
� Logo : 111001002 = -2810
Complemento para 2
� Como é que se converte um número representado em complemento para 2 com n bits, para um número representado com mais bits?
� Resposta : Extensão do sinal!
� Exemplo � Representar os seguintes números (de 8 bits) para 16
bits): � 011010102 => 00000000 011010102 (positivo)
� 110111102 => 11111111 110111102 (negativo)
Divisões e multiplicações por potências de 2
� Multiplicação por potências de 2 � deslocamento de bits para a esquerda
� Divisão por potências de 2 � Deslocamento de bits para a direita
� Exemplos � Dividir 110010102 (= 20210) por 4
� Deslocar à direita 2 vezes (22 = 4)
� 00110010.12 = 50.510
� Multiplicar 0000010102 (= 1010 ) por 8 � Deslocar à esquerda 3 vezes (23 = 8)
� 0010100002 = 8010
Notação em excesso
� Tem uma vantagem sobre todas as outras referidas � O valor em binário com todos os bits a 0 representa o
menor valor inteiro, quer este tenha sinal ou não � O valor em binário com todos os bits a 1 representa o
maior valor inteiro, com ou sem sinal
� Como o próprio nome indica, esta codificação de um inteiro (negativo ou positivo) em binário com n bits é sempre feita em excesso (de 2n-1 ou 2n-1 -1)
Notação em excesso
No exemplo com 8 bits, o valor +110 é representado em binário, em notação por excesso de 2n-1, pelo valor (+110 + excesso = +110 + 12810 = 0000 00012 + 1000 00002 = 1000 00012)
Diferenças entre os 4 modos
Operações Aritméticas em Complemento para 2
� Uma das vantagens do complemento para 2 é que podemos somar e subtrair 2 números sem ter que separar os bits de sinal
� Se o resultado da operação aritmética for demasiado grande (positiva ou negativa) para caber no grupo de bits utilizado então ocorre overflow.
Somar valores com sinais diferentes
� Nesta situação nunca ocorre overflow
� Usar a regra da soma e descartar o carry – out bit
� Exemplo 1): -8 + 3 utilizando 8 bits
(+3) 0000 0011 + (-8) 1111 1000
------------------------------- (-5) 1111 1011
Somar valores com sinais diferentes
� Exemplo
2) -5 + (-2)
(-2) 1111 1110
+ (-5) 1111 1011
----------------------------
(-7) 11111 1001
-> Descartar o carry out bit.
Overflow na Soma
� Se 2 números em complemento para 2 são somados e ambos tiverem o mesmo sinal (ambos positivos ou ambos negativos), então overflow ocorre só e somente só quando o resultado tem um sinal oposto
� Regra do overflow na soma em compl. 2 � (+ A) + (+ B) = -C => overflow � (- A ) + (- B) = +C => overflow
Overflow na soma
� Exemplo : Usando 2 valores em complemento para 2 com 4 bits ( [-8, +8[ )
1001 (-7) + 1010 (-6)
--------------------- 10011 => Overflow
Subtração em Compl. 2 � Normalmente, negamos o que queremos subtrair e
aplicamos a soma.
� Qualquer carry out é descartado.
� Exemplo : +8 - (+5) usando 8 bits
510 = 0000 01012
-510 = 1111 10102 (em comp. para 2)
+8 – (+5) = +8 + (-5)
0000 1000 (+8)
+ 1111 1011 (-5)
--------------------------------------
10000 0011 (+3) => descartar o carry-out
Overflow nas subtrações
� Se 2 números em complemento para 2 são subtraídos e os seus sinais são opostos, então ocorre overflow se e só se o resultado tem o mesmo sinal do valor que estamos a subtrair
� Overflow ocorre se: � (+A) – (-B) = -C
� (-A ) – (+B) = +C
Overflow na subtração
� Exemplo: +7 – (-6) com 4 bits em compl. para 2 ([-8,+8[)
-610 = 1010
+7 – (-6) = +7 + 6
0111
+ 0110 ---------------
1101
Sumário: Aritmética Comp. 2
� Soma � Somar os valores e descartar o carry- out bit.
� Subtração � Negar o valor a subtrair, somar e descartar o carry
out
� Overflow: � Somar 2 valores positivos e o resultado é negativo
� Somar 2 valores negativos e o resultado é positivo � Somar 2 valores de sinais diferentes não causa
overflow.
TPC
� O enunciado do TPC1 que está na página deve ser impresso e levado obrigatoriamente para as sessões das próximas aulas Teórico Práticas
� Ver material de apoio
Referências � Material de apoio do Prof. Alberto Proença - Universidade
do Minho � http://gec.di.uminho.pt/lcc/sc0809/Acetatos/
RepresNum_Mar04.pdf
� Problemas com Sinal e Magnitude � https://chortle.ccsu.edu/AssemblyTutorial/Chapter-08/
ass08_13.html
� Bernardo Nunes Gonçalves - Universidade Federal do Espirito santo � Aritmetica Binaria e Complemento a Base � h t t p : / / w w w . i n f . u f e s . b r / ~ z e g o n c / m a t e r i a l /
I n t r o d u c a o _ a _ C o m p u t a c a o /Aritmetica_binaria_Complemento.pdf