Organização e Arquitetura de Computadores Material de apoio Definição de bit, byte, caractere, medidas de grandeza em sistemas computacionais. Exemplos de aplicação. Tópico: 04 2 Esclarecimentos Esse material é de apoio para as aulas da disciplina e não substitui a leitura da bibliografia básica. Os professores da disciplina irão focar alguns dos tópicos da bibliografia assim como poderão adicionar alguns detalhes não presentes na bibliografia, com base em suas experiências profissionais. O conteúdo de slides com o título “Comentário” seguido de um texto, se refere a comentários adicionais ao slide cujo texto indica e tem por objetivo incluir alguma informação adicional aos conteúdo do slide correspondente. Bibliografia básica: PATTERSON, A.D.E.; HENNESSY, L.J.. Organização e projetos de computadores: a interface hardware/software. São Paulo: Campus, 2005.; MONTEIRO, Mário A.. Introdução à organização de computadores. 5.ed. Rio de Janeiro: LTC, 2007. STALLINGS, William. Arquitetura e organização de computadores : projeto para o desempenho. São Paulo: Pearson Education, 2005. 3 SISTEMAS DE NUMERAÇÃO Sistemas de numeração são formas de representação de valores. NÃO POSICIONAIS POSICIONAIS o valor do símbolo numérico não depende da sua posição no número o valor do símbolo numérico depende da posição em que está inserido numerais romanos o símbolo X vale 10 em qualquer posição em que estiver no número, seja XII, IX ou LXV numerais decimais o símbolo 4 dentro do número 425 significa o valor 400, mas no número 348 significa 40 4 SISTEMAS DE NUMERAÇÃO Cotidianamente trabalhamos com o sistema posicional decimal, assim chamado por ter dez símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Uma das explicações históricas para o sucesso desse sistema reside no fato de os seres humanos terem 10 dedos, o que facilitava, nos primórdios de nossa civilização, a tarefa de contar carneiros, bois, pedras, pessoas, etc. Contar com os dedos é algo natural até os dias de hoje, sendo o primeiro exercício matemático a que nos submetemos desde o nosso nascimento. Basta perguntar a idade a uma criança de 3 anos, e ela responderá mostrando 3 dedos da mão. Como tem dez símbolos, dizemos também que esse é um sistema de base 10. 5 SISTEMAS DE NUMERAÇÃO Apesar de utilizarmos com maior freqüência o sistema posicional decimal de numeração, os computadores são máquinas que trabalham com outro sistema: o sistema posicional de base 2 ou binário, o qual é composto de apenas dois símbolos: os símbolos 0 e 1. Para entendermos a razão do emprego do sistema binário nos sistemas computacionais é necessário refletirmos acerca da constituição física do computador. Como já vimos anteriormente, um computador nada mais é senão uma máquina constituída por uma série de dispositivos eletrônicos devidamente conectados de forma a processar entradas (dados) e gerar resultados (informações). Em termos físicos, a única coisa que realmente “trafega” entre esses dispositivos eletrônicos são sinais elétricos de tensão e corrente que vão simbolizar os dados a serem processados, endereços de recuperação e armazenamento e os sinais de controle de funcionamento dos diversos dispositivos. Se fôssemos supor a designação de um sinal elétrico diferente para cada símbolo da linguagem humana (letras, algarismos, e sinais de pontuação) seriam necessários mais de uma centena de níveis de tensão ou corrente diferentes. Mesmo se quiséssemos representar apenas os algarismos do nosso sistema decimal, precisaríamos de 10 níveis de tensão e corrente diferentes. Em tensões e correntes relativamente baixas como aquelas com as quais os computadores trabalham, essa quantidade de níveis diferentes a serem definidos exige que a diferença entre um nível e outro seja tão pequena a ponto de comprometer a correta interpretação da informação em caso de qualquer pequeno ruído ou interferência no sinal. 6 SISTEMAS DE NUMERAÇÃO Uma máquina capaz de interpretar diversos níveis diferentes seria certamente de custo bastante elevado, de complexidade considerável e de baixa confiabilidade (isso será discutido com maior ênfase no estudo da história da evolução dos computadores). Para solucionar esse problema optou-se por construir máquinas binárias, capazes de identificar apenas duas informações: o 0 e o 1. Assim, cada componente só precisa reconhecer dois níveis de tensão distintos: um que representa o valor 0 e outro que representa o valor 1. Tensão (V) Tensão (V) 5 4,5 7 3,5 3,5 6 3 5 2,5 Intervalo de transição 4 2 3 1,5 1,5 2 1 0 1 8 4 0,5 5 9 1 0 0 Exemplo hipotético de representação de informações em 10 níveis distintos, numa escala de tensão de 0 a 5 V 0 Tempo (t) Exemplo hipotético de representação de informações em 2 níveis distintos, numa escala de tensão de 0 a 5 V Tempo (t) 7 SISTEMAS DE NUMERAÇÃO Outra grande vantagem no uso do sistema binário é facilitar o emprego da lógica booleana (Sim/Não, Verdadeiro/ Falso, Aberto/Fechado,...), criada em 1854 pelo matemático inglês George Boole, tanto na construção de componentes quanto como base para a escrita de programas (programação). Com esta lógica foi possível a criação de portas lógicas, o elemento básico para a criação de computadores. Complementando o simples “sim” e “não”, “ligado” e “desligado”, etc que os números “1” e “0” poderiam representar, Boole criou condições especiais, a partir do “verdadeiro” e “falso” que tais números também poderiam representar, juntando à base binária a tradicional teoria dos conjuntos - como a condição “E” para a interseção de dois conjuntos e “OU” para a união de dois conjuntos. A esse conjunto de condições criado por Boole dá-se o nome de álgebra booleana. Com isto foi possível a criação do circuito lógico, um circuito capaz de reagir de acordo com dados entrados, ou seja, dar uma resposta de acordo com a entrada, de uma maneira prédefinida. Além do sistema binário, outros dois sistemas de numeração são utilizados no estudo dos computadores: • Sistema octal (base 8): utiliza os símbolos 0, 1, 2, 3, 4, 5, 6, e 7; menos utilizado • Sistema hexadecimal (base 16): utiliza os símbolos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, e F. usado com frequência na representação dos endereços de memória 8 BITS E BYTES O termo BIT nada mais é do que uma contração das palavras BInary digiT, ou seja, dígito binário. Portanto, como já vimos anteriormente, um BIT só pode assumir dois valores: o valor 0 ou o valor 1. O bit é a menor unidade de informação armazenável e trefegável num sistema computacional. Todos os dados armazenados ou processados no computador são representados na forma de bits. Como um bit é muito pouco, já que pode representar apenas dois valores, os computadores trabalham com agrupamentos de bits. Por exemplo, os processadores antigos, como o 8080, podiam operar com 8 bits de cada vez. Os PCs que usavam os processadores 8088 e 80286 trabalham com 16 bits (apesar de aceitarem também instruções e dados de 8 bits). Os processadores 80386, 80486, Pentium e superiores, operam com 32 bits, apesar de também aceitarem dados de 8 e 16 bits, e de terem algumas instruções especiais para dados de 64 e 80 bits. Os processadores mais modernos já trabalham naturalmente com conjuntos de 64 bits. A essa quantidade de bits que um processador consegue manipular de uma única vez dá-se o nome de palavra, a qual define qual o tamanho do agrupamento de bits padrão no mecanismo de transferência de informações entre a CPU e a memória principal de uma máquina. A palavra é uma característica de projeto de um microprocessador utilizada para indicar a unidade de transferência e processamento de um computador. 9 BITS E BYTES A primeira definição formal atribuída a um determinado conjunto ordenado de bits foi o BYTE, o qual representa um conjunto de 8 bits. Essa terminologia, criada pela IBM como uma referência para o armazenamento e transferência de dados entre UCP e memória e periféricos, passou a ser utilizada por todo o mercado e ainda hoje, apesar da evolução da capacidade de manipulação dos atuais sistemas, se mantém como uma unidade de referência. Embora os computadores trabalhem no sistema binário, a comunicação entre o homem e a máquina é feita utilizando-se símbolos da nossa linguagem cotidiana aos quais denominamos caracteres (as letras, os algarismos, os sinais de pountuação, etc.), os quais constituem a menor informação inteligível aos seres humanos . Portanto, para o adequado processamento dessas informações, é necessário que cada caracter seja representado por um conjunto de bits. Existem diversos tamanhos de agrupamentos de bits para representar caracteres, sendo que os principais códigos de representação de caracteres utilizam grupos de 8 bits por caracter, fazendo com que os termos byte e caracter sejam por vezes tratados como sinônimos. Assim, temos: BIT – Menor unidade de informação processável num computador. Pode representar apenas dois valores: 0 e 1. BYTE - Grupo de 8 bits. Pode representar valores numéricos entre 0 e 255. Pode também ser usado para representar caracteres. Em geral cada caracter ocupa um byte. CARACTER - Menor informação inteligível aos seres humanos (por exemplo, a letra “a” ou o algarismo “7”). 10 BITS E BYTES Para referenciar a capacidade de armazenamento e transferência de informações no formato binário são utilizados os múltiplos do bit e do byte. Da mesma forma que usamos cotidianamente como unidade de medida de comprimento o metro (m) e seus múltiplos, como o quilômetro (km), que equivale a 1000 metros, também o fazemos com os bits e bytes. Note que para medidas de distância utilizamos o sistema decimal, e, portanto, múltiplos na base 10: decâmetro (101 metros), hectômetro (102 metros) e quilômetro (103 metros). Porém, como utilizamos em computação o sistema binário, é conveniente trabalharmos com as potências da base 2, onde 210 não é exatamente 1000, mas 1024. Assim, temos: kB (KILOBYTE) - 210 bytes = 1024 bytes. MB (MEGABYTE) - 220 bytes = 1024 x 1024 bytes = 1024 kB = 1.048.576 bytes. GB (GIGABYTE) - 230 bytes = 1024 x 1024 x 1024 bytes = 1024 MB = 1.073.741.824 bytes. Para os bits, o raciocínio é exatamente o mesmo: kbits (KILOBITS) - 210 bits = 1024 bits. Mbits (MEGABITS) - 220 bits = 1024 x 1024 bits = 1024 kbits = 1.048.576 bits. Gbits (GIGABITS) - 230 bits = 1024 x 1024 x 1024 bits = 1024 Mbits = 1.073.741.824 bits. Além do Kilo (210), do Mega (220), e do Giga (230), que são os múltiplos mais comuns, temos ainda o Tera (T) = 240 ou 1024 G, e o Peta (P) = 250 ou 1024 T. 11 CONVERSÃO ENTRE BASES Antes de falarmos de conversão, é interessante tecermos algumas considerações sobre a composição dos números nos sistemas de numeração posicional. Voltando ao sistema decimal, com o qual estamos melhor familiarizados, observamos que: um número de 1 algarismo pode assumir 10 valores diferentes, de 0 a 9 um número de 2 algarismos pode assumir 100 valores diferentes, de 00 a 99 um número de 3 algarismos pode assumir 1000 valores diferentes, de 000 a 999 Isso ocorre porque num sistema de numeração posicional, o número máximo de valores diferentes que podem ser representados por n algarismos em uma base b qualquer é igual a bn. Assim, com 1 algarismo temos 101 = 10 valores, com 2 algarismos temos 102 = 100 valores, com 3 algarismos temos 103 = 1000 valores, e assim por diante. Da mesma forma, no sistema binário: um número de 1 bit pode assumir 2 valores diferentes, de 0 a 1 (porque 21 = 2) um número de 2 bits pode assumir 4 valores diferentes, de 00 a 11 (porque 22 = 4) um número de 3 bits pode assumir 8 valores diferentes, de 000 a 111 (porque 23 = 8) um número de 4 bits pode assumir 16 valores diferentes, de 0000 a 1111 (porque 24 = 16) 12 CONVERSÃO ENTRE BASES CONVERSÃO DE QUALQUER BASE PARA DECIMAL Voltando mais uma vez ao sistema decimal, podemos observar que, se tivermos um número qualquer, como por exemplo, 2463, esse número é formado por 2 milhares, 4 centenas, 6 dezenas e 3 unidades. Isso pode também ser escrito na seguinte forma: 2463 = 2 . 1000 + 4 . 100 + 6 . 10 + 3 . 1 Substituindo os multiplicadores por potências de 10 (afinal, a base é 10), temos: 2463 = 2 . 103 + 4 . 102 + 6 . 101 + 3 . 100 (Eq. 1) Visualizar essa relação é particularmente útil para se efetuar a conversão de um número em qualquer base para a base 10, ou seja, quando se quer encontrar o equivalente em decimal de um número expresso numa base qualquer. Generalizando a equação Eq. 1 acima, podemos afirmar que um número qualquer de n dígitos d numa base b tem o seu equivalente decimal N expresso por: N = dn . bn-1 + dn-1 . bn-2 + dn-2 . bn-3 + ......... + d2 . b1 + d1 . b0 (Eq. 2) 13 CONVERSÃO ENTRE BASES CONVERSÃO DE QUALQUER BASE PARA DECIMAL (cont.) Assim, de binário (base 2) para decimal (base 10), podemos fazer, por exemplo: (100101)2 = 1 . 25 + 0 . 24 + 0 . 23 + 1 . 22 + 0 . 21 + 1 . 20 = 32 + 0 + 0 + 4 + 0 + 1 = 37 (110,10)2 = 1 . 22 + 1 . 21 + 0 . 20 + 1 . 2-1 + 0 . 2-2 = 4 + 2 + 0 + 0,5 + 0 = 6,5 E de octal (base 8) para decimal: (473)8 = 4 . 82 + 7 . 81 + 3 . 80 = 256 + 56 + 3 = 315 (115,2)8 = 1 . 82 + 1 . 81 + 5 . 80 + 2 . 8-1 = 64 + 8 + 5 + 0,25 = 77,25 Finalmente, de hexadecimal (base 16) para decimal: (B108)16 = B . 163 + 1 . 162 + 0 . 161 + 8 . 160 = 45056 + 256 + 0 + 8 = 45320 (F0,1)16 = F . 161 + 0 . 160 + 1 . 16-1 = 240 + 0 + 0,0625 = 240,0625 7D2h = 7 . 162 + D . 161 + 2 . 160 = 7 . 256 + 13 . 16 + 2 . 1 = 1792 + 208 + 2 = 2002 14 CONVERSÃO ENTRE BASES CONVERSÃO DE DECIMAL PARA UMA BASE QUALQUER Para conversão de um número na base 10 para outra base, utilizamos o método das divisões sucessivas parte inteira: divide-se o número a ser convertido pela base desejada; toma-se o quociente resultante e divide-se novamente pela base até que o quociente seja zero; os restos das divisões formam a parte inteira do número convertido; o primeiro resto representa o último dígito (menos significativo) da parte inteira do número e o último quociente representa o primeiro dígito (mais significativo) da parte inteira; parte fracionária: multiplica-se a parte fracionária do número a ser convertido pela base desejada; toma-se a parte fracionária do número resultante e repete-se a operação; a parte inteira dos produtos obtidos representam a parte fracionária do número procurado. Exemplo 1: Converter o número decimal 29 para binário. 29 2 1 14 Portanto, 29d = 11101b 2 0 7 2 1 3 2 1 1 15 CONVERSÃO ENTRE BASES CONVERSÃO DE DECIMAL PARA UMA BASE QUALQUER (cont.) Exemplo 2: Converter o número decimal 174,25 para binário. 174 2 0 87 0,25 x 2 = 0,50 0,50 x 2 = 1,00 2 1 43 2 1 21 2 Parte fracionária: 01 1 10 2 Parte inteira: 10101110 0 5 2 1 2 2 0 1 Portanto, (174,25)10 = (10101110,01)2 16 CONVERSÃO ENTRE BASES CONVERSÃO DE DECIMAL PARA UMA BASE QUALQUER (cont.) Exemplo 3: Converter o número decimal 749,97 para octal. 749 8 5 93 8 5 11 8 Parte inteira: 1355 3 1 0,97 x 8 = 7,76 0,76 x 8 = 6,08 0,08 x 8 = 0,64 0,64 x 8 = 5,12 0,12 x 8 = 0,96 Parte fracionária: 76050 Portanto, (749,97)10 = (1355,76050)8 Exemplo 4: Converter o número decimal 155,742 para hexadecimal. 155 11 16 9 Parte inteira: 9B 0,742 x 16 = 11,872 0,872 x 16 = 13,952 0,952 x 16 = 15,232 0,232 x 16 = 3,712 Portanto, (155,742)10 = (9B,BDF3)16 Parte fracionária: BDF3 17 CONVERSÃO ENTRE BASES CONVERSÃO DE DECIMAL PARA UMA BASE QUALQUER (cont.) Outra forma mais prática de se fazer a conversão de base 10 para base 2 consiste em “ligar” os bits (fazendo-os igual a 1) correspondentes aos valores das potências de 2 que somados dão o número na base 10. Exemplo 5: Converter o número decimal 29 para binário. Em primeiro lugar, devemos encontrar a quantidade de dígitos binários (bits) que terá o número resultante da conversão. Sabemos que com 4 bits é possível representar números de 0 a 15 (pois 24 = 16, e que com 5 bits é possível representar números de 0 a 31 (pois 25 = 32). Assim, para representarmos o número 29, precisaremos de 5 bits. Então teremos: Valor 16 8 4 2 1 Potência 24 23 22 21 20 BIT 1 1 1 0 1 Portanto, (29)10 = 111012 Agora vamos aos bits, começando pela esquerda (bit mais significativo): - 16 “cabe” em 29, então “ligamos” o bit do 24 e subtraímos 16 de 29 = 13 - 8 “cabe” em 13, então “ligamos” o bit do 23 e subtraímos 8 de 13 = 5 - 4 “cabe” em 5, então “ligamos” o bit do 22 e subtraímos 4 de 5 = 1 - 1 “não cabe” em 2, então “não ligamos” o bit do 21 e não subtraímos nada - 1 “cabe” em 1, então “ligamos” o bit do 20 e subtraímos 1 de 1 = 0... FIM 18 CONVERSÃO ENTRE BASES TABELA DE CONVERSÃO DECIMAL 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 BINÁRIO 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 OCTAL 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 HEXADECIMAL 0 1 2 3 4 5 6 7 8 9 A B C D E F 19 CONVERSÃO ENTRE BASES CONVERSÃO DE BINÁRIO PARA OCTAL Para converter um número na base 2 para a base 8, deve-se separar o número em grupos de 3 dígitos, partindo-se da vírgula, ou apenas da direita para a esquerda no caso de números inteiros. Caso faltem símbolos para completar três, completa-se com zeros. Em seguida, deve-se converter cada conjunto de três símbolos binários em um octal, de acordo com a tabela anterior. Exemplo 6: Converter o número binário (010101,1101)2 para octal. 010 101,110 100 2 5 6 Portanto, (010101,1101)2 = (25,64)8 4 Exemplo 7: Converter 10011101000110b para octal 010 011 101 000 110 2 3 5 0 6 Portanto, 10011101000110b = (23506)8 20 CONVERSÃO ENTRE BASES CONVERSÃO DE BINÁRIO PARA HEXADECIMAL Para converter um número na base 2 para a base 16, deve-se separar o número em grupos de 4 dígitos, partindo-se da vírgula, ou apenas da direita para a esquerda no caso de números inteiros. Caso faltem símbolos para completar quatro, completa-se com zeros. Em seguida, deve-se converter cada conjunto de quatro símbolos binários em um hexadecimal, de acordo com a tabela anterior. Exemplo 8: Converter o número binário 110110100100,101011 para hexadecimal. 1101 1010 0100,1010 1100 D A 4 A C Portanto, (110110100100,101011)2 = (DA4,AC)16 Exemplo 9: Converter 10011101001110b para hexadecimal 0010 0111 0100 1110 2 7 4 E Portanto, 10011101001110b = 274Eh 21 CONVERSÃO ENTRE BASES CONVERSÃO DE OCTAL PARA BINÁRIO Para converter um número na base 8 para a base 2, basta converter individualmente cada dígito octal no seu correspondente conjunto de três dígitos binários, de acordo com a tabela anterior. Exemplo 10: Converter o número octal (25,64)8 para binário. 2 5 , 6 4 Portanto, (25,64)8 = (10101,1101)2 010 101,110 100 Exemplo 11: Converter 23506 em octal para binário. 2 3 5 0 6 010 011 101 000 110 Portanto, (23506)8 = 10011101000110b 22 CONVERSÃO ENTRE BASES CONVERSÂO DE HEXADECIMAL PARA BINÁRIO Para converter um número na base 16 para a base 2, basta converter individualmente cada dígito hexadecimal no seu correspondente conjunto de quatro dígitos binários, de acordo com a tabela anterior. Exemplo 12: Converter o número hexadecimal (DA4,AC)16 para binário. D A 4 , A C 1101 1010 0100,1010 1100 Portanto, (DA4,AC)16 = (110110100100,101011)2 Exemplo 13: Converter 274E em hexadecimal para binário. 2 7 4 E 0010 0111 0100 1110 Portanto, 274Eh = 10011101001110b 23 CONVERSÃO ENTRE BASES CONVERSÂO ENTRE HEXADECIMAL E OCTAL Para converter um número entre as bases 8 e 16, ou vice-versa, é mais conveniente que a conversão seja feita em duas etapas, convertendo-se primeiramente o número original para a base binária, e a seguir o seu correspondente binário para a base desejada. Exemplo 14: Converter o número hexadecimal (DA4,AC)16 para octal. D A 4 , A C 1101 1010 0100,1010 1100 (DA4,AC)16 = (110110100100,101011)2 110 110 100 100,101 011 6 6 4 4 , 5 3 Portanto, (DA4,AC)16 = (6644,53)8 Exemplo 15: Converter o número octal (23506)8 para hexadecimal. 2 3 5 0 6 010 011 101 000 110 0010 0111 0100 0110 2 7 4 6 (23506)8 = 10011101000110b Portanto, (23506)8 = (2746)16 24 ARITMÉTICA BINÁRIA ADIÇÃO DE NÚMEROS BINÁRIOS A operação de soma de dois números em base 2 é efetuada de modo semelhante à soma decimal, levando-se em conta que só há dois algarismos disponíveis (0 e 1). Do mesmo modo que operamos na base decimal, a soma é efetuada algarismo por algarismo, de maneira que, quando somamos 1 com 1, obtemos como algarismo resultante 0 e sobra o valor 1 para ser somado aos algarismos da parcela imediatamente seguinte à esquerda (valor de uma base: 2); esse é o valor que denominamos "vai 1". Assim: 0+0= 0+1= 1+0= 1+1= 1+1+ 0 1 1 0, com "vai 1“ 1 = 1, com “vai 1” Exemplo 1 1 1 1 1 1 1 0 1 1 0 1 , 0 1 + 1 0 0 1 1 1 , 1 1 1 0 1 0 1 0 1 , 0 0 25 ARITMÉTICA BINÁRIA SUBTRAÇÃO DE NÚMEROS BINÁRIOS A subtração em base 2, na forma convencional usada também no sistema decimal (minuendo - subtraendo = diferença), é relativamente mais complicada por dispormos apenas dos algarismos 0 e 1. Assim, 0 menos 1 necessita de um "empréstimo" de um valor igual à base (que no caso é 2), obtido do primeiro algarismo diferente de zero, existente à esquerda. Assim: 0-0= 1-0= 1-1= 0-1= Exemplo 0 1 0 1, com “empréstimo de 2“ 0–0=0 0 – 1 não é possível. Retira-se 1 da ordem à esquerda, que fica com zero e passa-se 2 para a direita. Logo 2 – 1 = 1 0–0=0 1–1=0 0 2 1–1=0 1 0 2 2 1 0 0 1 1 0 0 0 1 - 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 0 0–0=0 0 – 1 não é possível. Retira-se 1 da 5a ordem, a partir da direita, ficando 2 unidades na 4a ordem. Dessas 2 unidades, retira-se 1 para a 3a ordem (nesta 3a ordem ficam, então, 2), restando 1 nesta 4a ordem. Logo 2-1 = 1. 1–1=0 0–0=0 26 ARITMÉTICA BINÁRIA SUBTRAÇÃO DE NÚMEROS BINÁRIOS (cont.) Métodos mais interessantes de se efetuar a subtração de números binários envolvem o conceito de que uma subtração nada mais é que a soma de um número de sinal negativo. De fato, sabemos que, na aritmética decimal, dizer que 10 – 3 = 7 é o mesmo que dizer que 10 + (-3) = 7. Assim, temos que considerar a utilização de números binários negativos, os quais podem ser representados de várias formas: Sinal Magnitude: escolhe-se o último bit à esquerda de uma sequência para ser o bit de sinal. Quando este bit de sinal for 0 o número será positivo, e quando for 1 será negativo. Uma sequência de 4 bits, ao invés de representar os números de 0 a 15, representará os números de -7 a +7. A representação do número - 5, p. ex., será 1101 (onde 1 é o “-” e 101 é a representação de 5 com 3 bits). Complemento de um: Permanece o bit de sinal. Quando o número for positivo, será representado normalmente, começando por 0. O seu negativo é formado pela inversão de todos os seus bits. Uma sequência de 4 bits, ao invés de representar os números de 0 a 15, representará os números de -7 a +7. A representação do número - 5, p. ex., será 1010 (já que a representação de 5 com 4 bits é 0101). Complemento de dois: Permanece o bit de sinal. Quando o número for positivo, será representado normalmente, começando por 0. Para se obter a sua representação negativa deve-se fazer o complemento de 1, como já visto, e somar 1 ao resultado, Uma sequência de 4 bits, ao invés de representar os números de 0 a 15, representará os números de -8 a +7. A representação do número - 5, p. ex., será 1011 (já que a representação de 5 com 4 bits é 0101, e seu complemento de 1 é 1010). 27 ARITMÉTICA BINÁRIA SUBTRAÇÃO DE NÚMEROS BINÁRIOS (cont.) Considerações: 1. 2. 3. 4. 5. 6. Representações de números positivos e negativos numa sequência de 4 bits O número de bits para representação é variável e determinado no projeto do computador. A faixa de representação em sinal magnitude e em complemento de 1 para uma sequência de n bits é a mesma, possuindo 2n valores, entre -(2n-1-1) e +(2n-1-1). Tanto na representação em sinal magnitude quanto em complemento de 1 existem duas representações para o zero. A faixa de representação em complemento de 2 para uma sequência de n bits possui 2n valores, entre -2n-1 e +(2n-1-1). Na representação em complemento de 2 existe uma única representação para o zero, abrindo espaço para a representação de um número negativo adicional (-2n-1). A principal vantagem do uso do complemento é a realização de subtrações pelo processo da adição (mais tarde veremos que o processador trabalha desta forma, utillizando a representação em complemento de 2). 28 ARITMÉTICA BINÁRIA MULTIPLICAÇÃO DE NÚMEROS BINÁRIOS O processo de multiplicação é realizado na forma usualmente efetuada para a base 10, isto é, somas sucessivas, porém de forma muito mais simples, visto que os algarismos do multiplicador somente podem ser 0 ou 1. Assim, temos: 0x0=0 0x1=0 1x0=0 1x1=1 1 X 1 0 0 1 0 1 1 1 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 Na prática podemos observar que a multiplicação de números binários consiste numa série de deslocamentos e somas, e é exatamente dessa forma que funciona o algaritmo de multiplicação de um computador. 29 ARITMÉTICA BINÁRIA DIVISÃO DE NÚMEROS BINÁRIOS Como nas demais operações aritméticas, a divisão binária é efetuada de modo semelhante à divisão decimal, considerando-se apenas que: 0/1=0 1/1=1 e que a divisão por zero acarreta erro. 1 0 0 - 1 0 0 1 - 1 0 - 0 1 1 0 1 1 0 1 1 1 0 1 0 0 0 1 1 1 1 1 0 1 0 1 0 0 1 0 0 - 1 1 0 1 - 1 0 1 0 1 1 0 0 1 1 0 1 1 0 0 Outro método que pode ser utilizado é através de sucessivas subtrações, um processo mais simples de implementação em circuitos digitais. Nesse caso, o desejado quociente será a quantidade de vezes que o divisor poderá ser subtraído do dividendo, até que se obtenha um dividendo igual a zero. 30 REPRESENTAÇÃO EM PONTO FLUTUANTE Representação em Ponto Flutuante: Consideremos o número 57,683 usado acima como exemplo. Este número pode ser também expresso como 57,683 x 100. E também poderia ser expresso com 57683 x 10-3 ou ainda 0,57683 x 102. Na realidade, qualquer número inteiro ou fracionário - pode ser expresso neste formato número x base expoente, em que variamos duas coisas: a posição da vírgula (que delimita a parte fracionária) e a potência à qual elevamos a base. Essa representação é denominada representação em ponto flutuante, pois o ponto varia sua posição, modificando, em conseqüência, o valor representado. Representação Normalizada: Na representação normalizada, o número é preparado movendo a vírgula para a direita ou para a esquerda de forma que o número seja menor que 1, o mais próximo possível de 1, obviamente multiplicado por uma potência da base de forma a manter o valor do número. Em geral, isso significa que o primeiro dígito significativo seguirá imediatamente ao ponto (ou vírgula). Por exemplo: 57,68310 --> normalizando ==> 0,57683 x 102 0,000462810 --> normalizando ==> 0,4628 x 10-3 0,000010112 --> normalizando ==> 0,1011 x 10-4 De forma genérica, podemos representar a forma normalizada: ± número x base ±expoente A parte do número representado dessa forma normalizada (os algarismos significativos), damos o nome de mantissa.e portanto podemos representar: ± 0,M x B ± e onde M é a mantissa, B é a base e e é o expoente. 31 ANALÓGICO x DIGITAL SISTEMAS DIGITAIS Em palavras bem simples um Sistema Digital (SD) é um transformador que processa determinadas ENTRADAS e obtém determinadas SAÍDAS. Exemplo de sistemas em geral : fábricas, corpo humano, um programa numa linguagem de programação qualquer, etc... (não são exemplos de sistema digitais, apenas sistemas!) Para o sistema ser considerado DIGITAL devemos acrescentar restrições às Entradas e as Saídas. As entradas e saídas devem ser informações DISCRETAS. Um SD caracteriza-se por manipular informações discretas. O que são informações discretas? Os dígitos, as letras do alfabeto, etc... Contra-exemplo : Temperatura. A temperatura ambiente é uma informação contínua no tempo, também dita ANALÓGICA. O termo DIGITAL é utilizado porque os primeiros computadores foram utilizados maciçamente em computações numéricas que, obviamente, envolveu e por isto o termo DIGITAL. O computador digital que nós conhecemos é um bom exemplo de um SD. Como são representadas as entradas e saídas do SD? Nos SD dizemos que temos um SINAL na entrada do nosso sistema (ou vários) e um sinal (ou vários) na saída. Estes sinais, em computadores correspondem a grandezas físicas elétricas, principalmente TENSÃO.