Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Apostila de Arquitetura dos Computadores Versão Preliminar – Setembro de 2005 2 Capítulo 1 – Evolução Histórica dos Computadores 1.1 INTRODUÇÃO: 1.1.1 Conceituação: Mário A. Monteiro (Introdução à Organização de Computadores) “Um computador é uma máquina (composta de partes eletrônicas e eletromecânicas) capaz de sistematicamente coletar, manipular e fornecer resultados das manipulações de informações para um ou mais objetivos.” “Processamento de dados consiste em uma série de atividades ordenadamente realizadas, com o objetivo de produzir um arranjo determinado de informações a partir de outras obtidas inicialmente.” “Dado pode ser definido como a matéria-prima originalmente obtida de uma ou mais fontes (etapa da coleta).” “Informação é o resultado do processamento, isto é, o dado processado ou “acabado”.” Figura 3.1 – Etapas básicas de um processamento de dados. 1.1.2 Sistemas: “Um sistema é um conjunto de partes coordenadas que concorrem para a realização de um determinado objetivo.” O enfoque sistemático se faz presente em várias áreas do desenvolvimento comercial, científico, industrial e social. “Sistema de processamento de dados (SPD) são aqueles responsáveis pela coleta, armazenamento, processamento e recuperação, em equipamento eletrônico, dos dados necessários ao funcionamento de um outro sistema maior: o sistema de informação.” a) Sistema de computação; b) Sistema de aplicação. “Sistema de informação de uma empresa pode ser conceituado como o conjunto de métodos, processos e equipamentos necessários para se obter, processar e utilizar informações dentro da empresa.” Os sistemas de informações se desenvolvem segundo duas dimensões: a) componentes da organização: diversos setores funcionais; b) nível de decisão: operacional, gerencial e alto nível da organização. “Sistema de informações gerenciais (SIG) é o sistema que engloba todos os componentes e todos os níveis de decisão de uma organização.” Dados Processamento Resultado: Informação 3 1.1.3 Sistemas de Computação: “Programa é um conjunto de instruções.” Figura 3.2 – Algoritmo para soma de 100 números. Um programa de computador é a formalização de um algoritmo em linguagem inteligível pelo computador. “Linguagem binária é a linguagem de comunicação dos computadores.” Na linguagem binária os caracteres inteligíveis não são A, B, +, 0, etc., mas apenas zero(0) e um (1). Essa linguagem também chamada de linguagem de máquina, é, para os seres humanos, tediosa de manipular, difícil de compreender e fácil de acarretar erros. Por essa razão, foram desenvolvidas outras linguagens, mais próximas do entendimento dos operadores, genericamente chamadas de Linguagens de programação. Instruções de máquinas entendidas pelos computadores: a) executar operações aritméticas sobre dois números; b) executar operações lógicas sobre dois números; c) mover um conjunto de bits (um número ou parte) de um ponto para outro do computador; d) desviar a seqüência do programa; e) comunicação com algum dispositivo de entrada ou saída de dados. “Hardware é o conjunto formado pelos circuitos eletrônicos e partes eletromecânicas de um computador.” “Software consiste em programas, de qualquer tipo e em qualquer linguagem, que são introduzidos na máquina para fazê-la trabalhar, passo a passo, e produzir algum trabalho.” 1.2 HISTÓRICO: É comum encontrar uma divisão histórica da evolução dos computadores segundo o elemento básico de sua organização: Válvulas, transistores, circuito integrado, pastilhas de alta e muito alta integração. 1.2.1. Época dos dispositivos mecânicos (500 a.c – 1880) O conceito de efetuar cálculo surgiu com os babilônios e sua invenção o Ábaco. A primeira evolução do ábaco aconteceu em 1642, quando o filosofo e matemático Blaise Pascal construiu um contador mecânico que realizava soma e subtração. 1. Escrever e guardar N = 0 e SOMA = 0; 2. Ler número da entrada; 3. Somar valor do número ao de SOMA e guardar resultado como SOMA; 4. Somar 1 ao valor de N e guardar resultado como novo N; 5. Se valor de N for menor que 100, então passar para item 2; 6. Senão: imprimir valor de SOMA; 7. Parar. 4 1.2.2. Época dos dispositivos Eletromecânicos (1888-1930) Com a invenção do motor elétrico surgiu uma grande quantidade de máquinas de somar acionadas por motores elétricos, baseados no princípio de funcionamento da máquina de Pascal. Em 1889, Hollerith desenvolveu o cartão perfurado para guardar dados e uma máquina tabuladora mecânica, acionada por um motor elétrico, que contava, classificava e ordenava informações armazenadas no cartão perfurado. Em 1914, foi criada a IBM. Até a década de 1980, os cartões perfurados foram um dos principais elementos de entrada de dados dos computadores digitais, tais como IBM/360/370. 1.2.3. Época dos componentes eletrônicos – Primeiras Invenções (1930-1945) O problema dos computadores mecânicos era: a) baixa velocidade de processamento; b) falta de confiabilidade dos resultados. 1.2.4. Época dos componentes eletrônicos (1945 - ?) 1.2.4.1. Primeira Geração: Computadores à válvula O 1o computador eletrônico digital – ENIAC (Electronic Numerical Integrator And Computer): · Projetado de 1943 a 1946; · Funcionou até 1955; · Possuía 17.000 válvulas e 8000 Km de cabos; · Pesava 30 toneladas; · Consumia grande quantidade de energia e válvulas que queimava freqüentemente; · 10.000 operações por segundo; · 20 registradores que guardavam valor numérico de 10 dígitos; · Era uma máquina decimal, não binária, cada dígito é representado por um anel de 10 válvulas; · Programação feita através da recolocação dos fios. Em 1945 foi iniciada a construção do IAS (Von Neumann), que para os estudos de arquitetura de computadores, ele é fundamental. · Era constituído de quatro unidades principais: a memória, a UCP, a UC e dispositivos de entrada e saída; · memória de 1.000 posições, chamadas de palavras, cada uma podendo armazenar 40 dígitos binários (bits); · tantos dados como instruções eram representados na forma binária r armazenados na mesma memória; Resumindo, o IAS possuía características de arquitetura que permaneceram ao longo do tempo. As máquinas evoluíram consideravelmente em velocidade, capacidade de armazenamento, miniaturização, consumo de energia e calor, mas a arquitetura básica permaneceu. 1.2.4.2. Segunda Geração: Computadores Transistorizados A eletrônica moderna surgiu em 23 de Dezembro de 1947. Os transistores se tornaram não só sucesso em toda a industria eletrônica (custo, tamanho e desempenho melhores que os dispositivos a válvula), como também formaram a base de todos os computadores digitais. O fato de que se pode ligar e desligar a corrente elétrica em um dispositivo é a base de toda a lógica digital. A primeira companhia a lançar comercialmente um computador transistorizado foi a NCR. A IBM também teve grande participação transformou a série 700 em 7000. 5 1.2.4.3. Terceira Geração: Computadores com Circuitos Integrados Em Outubro de 1958, Jack Kilby, da Texas Instruments Co., colocou dois circuitos em uma só peça de germânio. O dispositivo resultante era rudimentar e a interconexão tinha que ser realizadas por fios externos, mas é reconhecido como o primeiro circuito integrado, CI, fabricado no mundo. Robert Noyce utilizou tecnologia para integrar vários circuitos em uma só partilha de silício. Em 1964, a IBM lançou a sua mais famosa família, a série 1360. 1.2.4.4. Quarta Geração: Computadores que utilizam VLSI (Very Large Scale Integration) Integração em larga escala, caracteriza uma classe de dispositivos eletrônicos capazes de armazenar, em um único invólucro, milhares e milhares de diminutos componentes. 1.2.5. Computadores Pessoais - Microcomputadores Em 1971, a Intel Corporation, produziu uma CPU em uma só pastilha de circuito integrado, denominadoINTEL-4004, que possuía palavra de 4 bits e tinha cerca de 2.300 transistores na pastilha. Logo em seguida, a Intel lançou o INTEL 8008 com 8 bits de palavra e 16 K de memória. Quadro Comparativo de características de microprocessadores Microprocessador Data de Lançamento Palavra de Dados Endereçamento Máximo Intel 4004 1971 4 1K bytes Intel 8080 1973 8 64K bytes Intel 8088 1980 16 1M bytes Intel 80286 1982 16 16M bytes Intel 80386 1985 32 4G bytes Intel 80486 1989 32 4G bytes Intel Pentium 1993 32 4G bytes Motorola MC 6800 1974 8 64K bytes MC 68000 1979 32 16M bytes MC 68010 1983 32 16M bytes MC 68020 1984 32 4G bytes MC 68030 1987 32 4G bytes MC 68040 1989 32 4G bytes Zilog Z 80 1974 8 64K bytes Zilog Z 8000 1979 16 1M bytes 6 Capítulo 2 – Sistemas de Numeração e Aritmética Computacional 2.1 SISTEMAS DE NUMERAÇÃO: Sistemas de numeração são formas de representação de valores. Existem os sistemas não- posicionais e os posicionais. Nos não-posicionais o símbolo não depende da posição. Por exemplo, os numerais romanos: o símbolo X vale 10 em qualquer posição que estiver no número, seja IX ou LXV. Já nos posicionais, o valor do símbolo muda com a posição. Por exemplo: o símbolo 6 dentro do número 625 significa o valor 600, mas no número 461 significa 60. Diariamente trabalhamos com o sistema posicional decimal, assim chamado por ter dez símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Como tem dez símbolos, dizemos também que possui base 10. Como sabemos, o computador funciona em binário, ou seja, representações de número somente com os símbolos 0 e 1. Este é um sistema de numeração com base 2 ou binário. Na eletrônica ainda é comum trabalhar-se com o sistema octal, que possui base 8, cujos símbolos são: 0, 1, 2, 3, 4, 5, 6, 7. Para o endereçamento da memória do computador é utilizado o sistema de numeração hexadecimal, de base 16, formado pelos símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. São estes quatro sistemas de numeração que serão o fundamento do estudo da computação, sendo necessários para compreensão da organização de sua arquitetura. Para compreendermos melhor a relação entre eles, devemos estudar a conversão de uma base para outra. 2.2 CONVERSÃO ENTRE BASES: 2.2.1 De binário, octal, e hexadecimal para decimal: Segue-se a regra simples: símbolo x baseposição Ou seja, eleva-se a base a converter à potência cujo valor é sua posição no número e multiplica-se pelo símbolo. Assim, de binário (base 2) para decimal (base 10), podemos fazer, por exemplo: Ex1: (100101)2 = 1 x 25 + 0 x 24 + 0 x 23 + 1 x 22 + 0 x 21 + 1 x 20 = 32 + 0 + 0 + 4 + 0 + 1 = 37 Ex2: (110,10)2 = 1 x 22 + 1 x 21 + 0 x 20 + 1 x 2-1 + 0 x 2-2 = 4 + 2 + 0 + 0,5 + 0 = 6,5 E de octal (base 8) para decimal: Ex1: (473)8 = 4 x 82 + 7 x 81 + 3 x 80 = 256 + 56 + 3 = 315 Ex2: (115,2)8 = 1 x 82 + 1 x 81 + 5 x 80 + 2 x 8-1 = 64 + 8 + 5 + 0,25 = 77,25 7 Finalmente, de hexadecimal (base 16) para decimal: Ex1: (B108)16 = B x 163 + 1 x 162 + 0 x 161 + 8 x 160 = 45056 + 256 + 0 + 8 = 45320 Ex2: (F0,1)16 = F x 161 + 0 x 160 + 1 x 16-1 = 240 + 0 + 0,0625 = 240,0625 2.2.2 Conversão de decimal para binário, octal e hexadecimal: Para converter números da base 10 para outras bases, segue-se a seguinte regra: 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 o número convertido; o primeiro resto representa o último dígito do número; o último quociente representa o primeiro dígito do número; Para conversão de decimal para binário, temos o exemplo: (174)10: 174 / 2 = 87 resto 0 87 / 2 = 43 resto 1 43 / 2 = 21 resto 1 21 / 2 = 10 resto 1 10 / 2 = 5 resto 0 5 / 2 = 2 resto 1 2 / 2 = 1 resto 0 último quociente: 1 ==> 10101110 (174)10 = (10101110)2 De decimal para octal: (749)10: 749 / 8 = 93 resto 5 93 / 8 = 11 resto 5 11 / 8 = 1 resto 3 último quociente: 1 ==> 1355 (749)10 = (1355)8 E de decimal para hexadecimal: (155)10: 155 / 16 = 9 resto 11 (B) último quociente: 9 ==> 9B (155)10 = (9B)16 2.2.3 Conversão de binário para octal Basta converter cada três símbolos binários em um octal, partindo-se da direita. Caso faltem símbolos para completar três, completa-se com zeros. Exemplo: (010 101)2 = (25)8 8 2.2.4 Conversão de octal para binário: O oposto do método anterior: pega-se cada valor e converte-se pela tabela em três símbolos binários. Exemplo: (356)8 = (11 101 110,)2 2.2.5 Conversão de binário para hexadecimal: Semelhante a conversão de octal, apenas pegando cada quatro símbolos binários para um hexadecimal, convertidos a partir da tabela. Exemplo: (1101 1010 0100)2 = (DA4)16 2.2.6 Conversão de hexadecimal para binário: Oposto do método anterior. Exemplo: (CAFE)16 = (1100 1010 1111 1110)2 TABELA DE CONVERSÃO DECIMAL BINÁRIO OCTAL HEXADECIMAL 0 0000 0 0 1 0001 1 1 2 0010 2 2 3 0011 3 3 4 0100 4 4 5 0101 5 5 6 0110 6 6 7 0111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F 9 2.3 ARITMÉTICA COMPUTACIONAL: Todo sistema de computação moderno é construído de modo a ser capaz de armazenar, interpretar e manipular informações codificadas na forma binária. Além disso, muitos deles possuem a capacidade de representar valores e efetuar operações aritméticas utilizando recursos de outras bases da potência de 2 (mais especialmente as bases octal - base 8 e hexadecimal - base 16). Esse é o caso, por exemplo, de representação e aritmética de números em ponto flutuante; alguns sistemas de computação IBM empregam a base 16 quando efetuam aritmética em ponto flutuante. 2.3.1 Procedimento de Adição: Tendo em vista que toda representação de valores nos computadores digitais é realizada no sistema binário, é obvio, então, que as operações aritméticas efetuadas pela máquina sejam também realizadas na mesma base de representação, a base 2. As operações de adição nas bases 2, 8 e 16 são realizadas de modo idêntico ao que estamos acostumados a usar para a base 10, exceto no que refere à quantidade de algarismos disponíveis (que, em cada base, é diferente). Esse fato acarreta diferença nos valores encontrados, mas não no modo como as operações são realizadas. 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, apenas, que só há dois algarismos disponíveis (0 e 1). Assim: 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0, com "vai 1" Ex1: 111111 1 vai 1 101101,01 +100111,11 1010101,00 Ex2: 1 11 1 vai 1 11001,1101 +11100,1110 110110,1011 Do mesmo modo que operamos na base decimal, a soma é efetuada algarismo por algarismo, de maneia 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". Se os dois algarismos serem somados são de valor igual a 1, e ainda temos o "vai 1" para o algarismo da esquerda. Resumindo: 1 + 1 + 1 = 1 com "vai 1"; 1 + 0 + 1 = 0 com "vai 1". Adição de Números Octais e Hexadecimais Os procedimentos para adição nas bases 8(octal) e 16(hexadecimal) também não diferem da base 10, exceto quanto à quantidade de algarismos diferentes em cada base, conforme já mencionamos anteriormente. 10 No caso da base octal, temos 7 algarismos disponíveis e, portanto, a soma de 2 algarismos produzindo um valor superior a 7 implica a utilização do conceito de "vai 1" consiste em um valor igual a 8 na ordem inferior). Para a base 16, o "vai 1" somente ocorre quando a soma de 2 algarismos excede o valor da base, 16. Ex: Soma com aritmética em base 8: Ex1:11 3463 +1524 5207 Ex2: 1 1 1 422,74 +513,74 1136,70 Ex3: 111 1 27,416 +55,635 105,253 A execução detalhada do algoritmo de soma para o Ex1 é apresentada a seguir, de modo que se possa compreender melhor o processo: 3 + 4 = 7, valor colocado na coluna, em resultado; 6 + 2 = 8 (não há algarismo na base 8 - o maior algarismo é 7). Assim, temos: 8 = 8 + 0; o 0 é colocado na coluna como resultado e o 8 é passado para a esquerda com valor 1 (é o "vai 1"), pois 8 unidades de uma ordem representam apenas 1 unidade de ordem superior - mais à esquerda); 4 + 5 +1 ("vai 1") = 10 (10=8 + 2); logo, é 2 na coluna de resultado e "vai 1" à esquerda, representando o valor 8). 3 + 1 + 1 ("vai 1") = 5, colocado na coluna resultado. O processo é semelhante para os exemplos (2) e (3). Ex: Soma com aritmética em base 16: Ex1: 11 1 3A54,3B + 1BE8,7A 563C,B5 Ex2: 1 11 3A943B +23B7D5 5E4C10 Ex3: 11 1 1 2AC79 +B7EEC E2 B65 A execução detalhada do algoritmo de soma para o Ex1 é apresentada a seguir, de modo que se possa compreender melhor o processo: 10(A) + 11(B) = 21, que excede 5 da base 16. Logo, coloca-se 5 na linha "soma" e "vai 1" para a esquerda; 7 + 3 + 1 = 11 (algarismo B); 8 + 4 = 12 (algarismo C); 14(E) + 5 = 19, que excede de 3 a base 16. Logo, coloca-se na linha "soma" e "vai 1" para a esquerda; 10(A) + 11(B) + 1 = 22, que excede 6 da base 16 e "vai 1"; 1 + 3 + 1 = 5. 11 2.3.2 Procedimento de Subtração: Os procedimentos para execução da operação de subtração em bases 2, 8, 16, ou qualquer outra não decimal seguem as mesmas regras adotadas para a base 10, variando, conforme já mencionado diversas vezes, quanto à quantidade de algarismos existentes em cada base. Essas regras são: minuendo - subtraendo = diferença; operações realizada algarismo por algarismo; se o algarismo do minuendo for menor que o algarismo do subtraendo, adiciona-se ao minuendo um valor igual ao da base (2 ou 8 ou 16). Esse valor corresponde a uma unidade subtraída (empréstimo) do algarismo à esquerda do minuendo; resultado é colocado na coluna, na parcela diferença. 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 (no caso é 2), obtido do primeiro algarismo diferente de zero, existente à esquerda. Se estivéssemos operando na base decimal, o "empréstimo" seria de valor igual a 10. Ex1: 2 002 101101 - 100111 000110 Ex2: 1 02 022 100110001 - 010101101 010000100 A execução detalhada do algoritmo de soma para o Ex2 é apresentada a seguir, de modo que se possa compreender melhor o processo: 1 – 1 = 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 1 – 1 = 0 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 Subtração de números Octais e Hexadecimais Os procedimentos para realização da operação de subtração com valores representados em base 8 (octal) ou 16 (hexadecimal) são os mesmos das bases 2 ou 10, porém com a já conhecida diferença em termos de algarismos disponíveis. 12 Ex: Subtração com valores em base 8: Ex1: 8 248 48 3526,53 - 2764,36 0542,15 Ex2: 88 6208 7312 - 3465 3625 Ex: Subtração com valores em base 16: Ex1: 16 3B16 D16 4C7BE8 - 1E9 27A 2DE96E Ex2: 16 3816A 16C16 49AB,8D5 - FC8,AB8 39E2,E1D 2.3.3 - Adição Utilizando Números Com Sinal: O Meio normal para representar números com sinal (+ ou -) é adicionando-se um BIT ao número, chamado BIT de sinal (BIT mais representativo). Convenção: 0: BIT DE SINAL que representa um número positivo; 1: BIT DE SINAL que representa um número negativo. Ex: 0 0111 = (+7)10 1 0111 = (-7)10 Bit de sinal 2.3.4 – Aritmética Complementar: * Complemento Aritmético: É definido como sendo o que falta a um número para atingir o seu módulo. Módulo de um número de um dígito é a quantidade de números diferentes que podemos distinguir. Ex: Sistema Decimal Þ Módulo 10 2 Þ 8 4 Þ 6 No sistema binário, composto por dois símbolos, isto é, os BITS 0 e 1, um é complemento do outro. 13 * Subtração no sistema complemento-de-2: Obtenção do complemento-de-2 de um número binário: - Troca-se cada 0 por 1 e vice-versa (complemento-de-1); - Soma-se 1 ao resultado. Ex.: 1001 Þ 0110 (complemento-de-1) + 1 0111 (complemento-de-2) OBS: A principal vantagem do uso de complemento é executar a SUBTRAÇÃO pelo processo da ADIÇÃO. ü Dois números positivos (+7) 0 0111 + (+3) 0 0011 (+10) 0 1010 ü Número positivo e número negativo (+7) 0 0111 0 0111 + (-3) 1 0011 +1 1101 Complemento-de-2 100100 Þ (+4) ü Dois números negativos (-7) 1 0111 1 1001 + (-3) 1 0011 +1 1101 Complemento-de-2 11 0110 Descomplementar (1 1010) Þ (-10) * Fazer complemento-de-2 no número negativo; * Somar os números; * Descomplementar o resultado da soma. Veja mais detalhes sobre este assunto no Capítulo 3. 14 Capítulo 3 – Representação de Dados Em um computador são armazenados e processados apenas dados e instruções. Um programa de computador é formado por uma seqüência de instruções que operam sobre um conjunto de dados (os dados são os operandos das instruções). Um computador executa operações sobre dados numéricos (os números) ou alfabéticos (letras e símbolos). Por outro lado, um computador somente opera sobre valores representados em notação binária, isto é, somente "entende" bits - uns e zeros. Assim, os dados precisam ser representados no computador (na memória e no processador) sempre através de bits, de uma forma que o computador possa interpretar corretamente o seu significado e executar as operações adequadas. Em outras palavras, isso significa que é preciso definir uma forma de representar os dados, codificados em uns e zeros, que possam ser interpretados pelo computador, de forma correta e eficiente (com bom desempenho e pouco consumo de memória). TIPOS DE DADOS Um programa (a seqüência de instruções) deverá manipular diferentes tipos de dados. Os dados podem ser: --numéricos ---- ponto fixo (números inteiros) ---- ponto flutuante (números reais ou fracionários) ---- BCD (representação decimal codificada em binário) -----alfabéticos ----- letras, números e símbolos (codificados em ASCII e EBCDIC) O tipo de dado que está sendo fornecido ao programa deverá ser informado pelo programador, através de declarações, fazendo com que o programa interprete o dado fornecido de acordo com a declaração. Por exemplo, na linguagem C, declarações tipo int num; (inteiro) ou float sal (real); indicam que a variável num é um número inteiro (int) e a variável sal é um número real (float), representação científica, isto é, representado na forma [(Sinal) Valor x Base (elevada a Expoente)]. Declarações tipo char letra ; indicam que a variável é um caractere. 15 DADOS NUMÉRICOS A forma mais intuitiva de representar números seria através da conversão do número decimal para seu correspondente em binário. Como os computadores operam sempre em binário,essa seria a forma mais imediata e eficiente. Os números podem ser positivos ou negativos. Um aspecto primordial a ser definido seria então como representar o sinal. Nesta representação foi definida a utilização de mais um bit na representação (o bit mais representativo), representando o sinal, com a seguinte convenção: bit 0 ==> sinal positivo bit 1 ==> sinal negativo. A seguir, apresentamos exemplos de números e sua representação em binário: Valor decimal Valor binário com 8 bits (7 + bit de sinal) +9 00001001 (bit inicial 0 significa positivo) -9 10001001 (bit inicial 1 significa negativo) +127 01111111 (bit inicial 0 significa positivo) -127 11111111 (bit inicial 1 significa negativo) Assim, uma representação em binário com n bits teria disponíveis para a representação do número n-1 bits (o bit mais significativo representa o sinal). Essa representação tem o nome de representação em sinal e magnitude . REPRESENTAÇÃO DE NÚMEROS INTEIROS (PONTO FIXO) Dados numéricos ponto fixo são números inteiros, isto é, sem parte fracionária. Os dados NUMÉRICOS INTEIROS POSITIVOS são sempre representados com o sinal (convencionado que bit mais significativo 0 = sinal positivo) e em seguida o valor do dado em binário. Porém, devido à complexidade dos algoritmos para os computadores operarem com NÚMEROS NEGATIVOS quando se usa a representação em sinal e magnitude (acima sumariamente apresentada), são comumente adotadas outras formas que facilitam e tornam mais eficiente a manipulação de operações aritméticas em computadores: as representações em complemento. Vamos analisar cada uma dessas representações. REPRESENTAÇÃO EM SINAL E MAGNITUDE A magnitude (isto é, o valor absoluto, que independe de sinal) de um número é representada em binário. O sinal é representado por um bit (o bit mais significativo, isto é, o bit mais à esquerda na representação). Por convenção, o bit de sinal 0 (zero) significa que o número é positivo e o bit 1 representa número negativo. 16 O valor dos bits usados para representar a magnitude independe do sinal, isto é, sendo o número positivo ou negativo, a representação binária da magnitude será a mesma, o que varia é apenas o bit de sinal. Ex.: 0011 = +3 1011 = -3 (011 equivale ao valor absoluto 3) FAIXA DE REPRESENTAÇÃO A representação na base b em sinal e magnitude com n bits (incluindo o bit de sinal) possui bn representações e permite representar bn -1 valores, de vez que há duas representações para o zero. A faixa de representação de uma representação na base 2 em sinal e magnitude com n bits (incluindo o bit de sinal) possui 2n representações, representando os valores entre - ( 2n-1-1) e + ( 2n-1-1). O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1-1). Obs1.: o número de bits para a representação é determinado no projeto do computador. Obs2.: em sinal e magnitude, existem duas representações para o zero. ARITMÉTICA EM SINAL E MAGNITUDE Algoritmo da soma a) verificar o sinal das parcelas b) se os sinais forem iguais: -- repetir o sinal -- somar as magnitudes c) se os sinais forem diferentes -- verificar qual parcela tem maior magnitude -- repetir o sinal da maior magnitude -- subtrair a menor magnitude da maior magnitude Algoritmo da subtração O algoritmo da subtração é o mesmo da soma, sendo feita como se fosse uma soma de dois números que tem os sinais diferentes. A representação em sinal e magnitude apresenta uma grande desvantagem: ela exige um grande número de testes para se realizar uma simples soma de dois números inteiros. O algoritmo acima descrito é complicado de ser realizado no computador, o que resulta em baixa eficiência (execução lenta). Um outro ponto negativo é termos duas representações para o zero. 17 REPRESENTAÇÃO DE NÚMEROS EM COMPLEMENTO Complemento é a diferença entre cada algarismo do número e o maior algarismo possível na base. Uma vantagem da utilização da representação em complemento é que a subtração entre dois números pode ser substituída pela sua soma em complemento. REPRESENTAÇÃO DE NÚMEROS POSITIVOS EM COMPLEMENTO A representação de números positivos em complemento não tem qualquer alteração, isto é, é idêntica à representação em sinal e magnitude. REPRESENTAÇÃO DE NÚMEROS NEGATIVOS EM COMPLEMENTO A (BASE - 1) A representação dos números inteiros negativos é obtida efetuando-se: (base - 1) menos cada algarismo do número. Fica mais fácil entender através de exemplos: Ex.1: Calcular o complemento a (base - 1) do número 29710. Se a base é 10, então 10-1 = 9 e o complemento a (base -1) será igual a complemento a 9 Ex.2: Calcular o complemento a (base - 1) do número 3A7EH. Se a base é 16, então 10H-1 = F e o complemento a (base -1) será igual a complemento a F. Portanto: Ex.1 Ex.2 (base -1) --->999 FFFF -297 -3A7E Complemento --->702 C581 Caso Particular: Números na Base 2 (Complemento a 1) Para se obter o complemento a 1 de um número binário, devemos subtrair cada algarismo de 1. Uma particularidade dos números binários é que, para efetuar esta operação, basta inverter todos os bits. Como exemplo, vamos calcular o complemento a 1 (C1) de um número binário 0011 com 4 dígitos. 1111 -0011 1100 (C1) Portanto, bastaria inverter todos os bits! 18 Vamos analisar como ficaria a representação em C1 dos números binários de 4 dígitos: Decimal (positivo) Binário (se o número é positivo, não há alteração) Decimal (negativo) Binário (em C1) 0 0000 0 1111 1 0001 -1 1110 2 0010 -2 1101 3 0011 -3 1100 4 0100 -4 1011 5 0101 -5 1010 6 0110 -6 1001 7 0111 -7 1000 FAIXA DE REPRESENTAÇÃO A representação na base b em complemento a (base-1) com n bits possui bn representações e permite representar bn -1 valores. Há duas representações para o zero. A faixa de representação de uma representação na base 2 em complemento a (base-1) com n bits é a mesma que em sinal e magnitude e pode ser calculada como 2n valores, entre - ( 2n-1-1) e + ( 2n-1-1) O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1-1). Obs1.: o número de bits para a representação é determinado no projeto do computador. Obs2.: em C1 também existem duas representações para o zero. Vamos verificar qual a faixa de representação nos seguintes exemplos: Base 10 com 3 dígitos: a representação varia de 000 a 999 (103 representações), representando os números de -499 a -1 (faixa negativa), de +1 a +499 (faixa positiva). Base 10 Faixa Inferior (positiva) Faixa Superior (negativa) C1 1 2.... 498 499 500 501 ..... 997 998 Número representado 1 2 .... 498 499 -499 -498 ..... -2 -1 O zero pode ser representado tanto por 000 quanto por 999. 19 Base 16 com 4 dígitos: a representação varia de 0000 a FFFF, representando os números de -7FFF a -0001 (faixa negativa) e de +0001 a +7FFF (faixa positiva). Base 16 Faixa Inferior (positiva) Faixa Superior (negativa) C1 0001 0002 ... 7FFF 8000 8001 ....FFFE Número representado 0001 0002 ... 7FFF -7FFF -7FFE ...... -0001 O zero pode ser representado tanto por 0000 quanto por FFFF. Obs: Podemos concluir que, tal como na representação em sinal e magnitude, sempre que em uma representação em complemento o primeiro dígito binário for 1, o número representado é negativo! Mas é importante notar que o bit mais significativo, na representação em complemento, ao contrário do que ocorre na representação em sinal e magnitude, NÃO REPRESENTA O SINAL DE NEGATIVO! ARITMÉTICA EM COMPLEMENTO A (BASE - 1) Na aritmética em complemento a (base-1), basta somar os números, sendo que um número negativo estará representado por seu complemento. Ex.: Somar + 123 com - 418 (decimal). Sinal e magnitude Complemento a (base- 1) Verificação -418 581 (C9) 999 +123 +123 -295 -295 704 704 Verificamos que o resultado 704 (C9) é um número negativo,isto é, o complemento a 9 (base 10 -1) de 295. Repare que a subtração (ou soma de um número positivo com um número negativo) se transforma, nesta representação, em uma soma em complemento, isto é, a soma dos complementos do número positivo com o número negativo! Portanto, numa subtração (realizada através de soma em complemento), se o número é positivo, mantenha-o; se o número é negativo, complemente-o; e aí, é só somar! Dessa forma, podemos constatar que o algoritmo da soma em complemento é muito mais simples que o da soma em sinal e magnitude, de vez que não requer nenhum teste. No entanto, continuamos com duas representações para o zero. Vamos a seguir discutir a solução para esse problema. REPRESENTAÇÃO DE NÚMEROS NEGATIVOS EM COMPLEMENTO A BASE A representação dos números inteiros negativos em complemento a base é obtida subtraindo-se da base cada algarismo do número. Ora, seria a mesma coisa subtrair cada algarismo de (base-1), isto é, calcular o complemento a (base -1) e depois somar 1 ao resultado, ou seja: b - N = [(b-1) - N] + 1. Ou seja, encontramos o complemento a (base-1) do número (o que facilita muito no caso dos números binários) e depois somamos 1 ao resultado. Fica mais fácil entender através de exemplos: 20 Ex.1: Calcular o complemento a base do número 29710. Se a base é 10, o complemento a base será igual a complemento a 10. Ex.2: Calcular o complemento a base do número 3A7Eh. Se a base é 16 (lembremos mais uma vez que o H ou h depois do número simboliza "hexadecimal"), o complemento a base será igual a complemento a 1610 ou 10h. Portanto, calculando o complemento a base dos números acima, temos: Ex. 1 Ex.1 (alternativa) Ex.2 100 0 999 FFFF - 297 -297 -3A7E 702 702 C581 +001 +0001 703 C582 Caso Particular: Números na Base 2 (Complemento a 2) Para se obter o complemento a 2 de um número binário, a regra geral nos diz para subtrair cada algarismo de 2. Ora, seria a mesma coisa subtrair cada algarismo de 1 (complemento a 1) e depois somar 1 ao resultado, ou seja: (2-N) = (1-N) + 1. Assim, tirando partido da particularidade dos números binários anteriormente apresentada (para obter o C1 de um número binário, basta inverter todos os bits), para obter o C2 de um número obtemos primeiro o C1 (invertendo os bits) e depois somamos 1 ao resultado. Como exemplo, vamos calcular o complemento a 2 (C2) de um número binário 0011 com 4 dígitos. 1111 -0011 1100 (C1) +0001 1101 (C2) Vamos analisar como ficaria a representação em C2 dos números binários de 4 dígitos: Decimal (positivo) Binário (se o número é positivo, não há alteração) Decimal (negativo) Binário (C2) 0 0000 -1 1111 1 0001 -2 1110 2 0010 -3 1101 3 0011 -4 1100 4 0100 -5 1011 5 0101 -6 1010 6 0110 -7 1001 7 0111 -8 1000 Vemos assim que em C2, não há duas representações para o valor 0 e conseqüentemente abriu-se lugar para mais uma representação - no caso, mais um número negativo pode ser representado. 21 FAIXA DE REPRESENTAÇÃO A representação na base b em complemento a base com n bits possui bn representações e permite representar bn valores. A faixa de representação de uma representação na base 2 em complemento a base com n bits pode ser calculada como 2n valores (entre - 2n-1 e + 2n-1-1), sendo 2 a base. O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1). Obs1.: o número de bits para a representação é determinado no projeto do computador. Obs2.: nesta representação somente existe uma representação para o zero e há mais um número negativo representado! Nos exemplos acima, vamos verificar qual a faixa de representação: Base 10 com 3 dígitos: de 0 a 999 (103 valores), representando de -500 a -1 (faixa negativa) e de 1 a +499 (faixa positiva). O zero tem apenas uma representação: 000. Base 10 Faixa Inferior (positiva) Faixa Superior (negativa) C2 1 2 .... 499 500 501 ..... 999 Número representado 1 2 .... 499 -500 -499 ... -1 Base 16 com 4 dígitos: de 0 a FFFF, representando -8000 a -1 (faixa negativa) e de 0 a +7FFF (faixa positiva). O zero tem apenas uma representação: 0000. Base 16 Faixa Inferior (positiva) Faixa Superior (negativa) C2 0001 0002 ... 7FFF 8000 F001 ...... FFFF Número representado 0001 0002 ... 7FFF -8000 -7FFF... -0001 Obs: Podemos concluir que, tal como na representação em sinal e magnitude e em complemento a (base-1), sempre que em uma representação em complemento a base o primeiro dígito binário for 1, o número representado é negativo! Mas é importante notar que o bit mais significativo, na representação em complemento, ao contrário do que ocorre na representação em sinal e magnitude, NÃO REPRESENTA O SINAL DE NEGATIVO! 22 ARITMÉTICA EM COMPLEMENTO A BASE Na aritmética em complemento a base, basta somar os números, sendo que um número negativo estará representado por seu complemento a base. Ex.: Somar +123 com -418 (decimal). Sinal e magnitude Cálculo C2 C2 Verificação -418 999 582 999 +123 -418 +123 -295 -295 581 (C1) 705 (C2) 704 +001 +001 582 (C2) 705 Verificamos que o resultado 705 (C2) é um número negativo, isto é, o complemento a 10 (base 10) de 295. Repare que a subtração (ou soma de um número positivo com um número negativo) se transforma em uma soma em complemento, isto é, a soma dos complementos do número positivo com o número negativo! Portanto, se o número é postivo, mantenha-o; se o número é negativo, complemente-o; e aí, é só somar! Dessa forma, podemos constatar que o algoritmo da soma em complemento é muito mais simples que o da soma em sinal e magnitude, de vez que não requer nenhum teste. 23 ARITMÉTICA BINÁRIA E EM COMPLEMENTO Nesta seção, vamos rever os conceitos já apresentados sobre aritmética binária e em complemento e resolver alguns exercícios para exemplo. Inicialmente, vamos considerar apenas números positivos (o sinal não será representado). Exemplo de Operações de Adição BASE 2 BASE 8 BASE 8 BASE 16 BASE 16 111 11 _11 111 111 0111 0762 7142 A679 6FACB +0101 +0365 +0576 +49FB +4ED93 1100 1347 7740 F074 BE85E Exemplo de Operações de Subtração BASE 2 BASE 8 BASE 8 BASE 16 BASE 16 111 0762 7142 A679 6FACB -101 -0365 -0576 -49FB -4ED93 010 0375 6344 5C7E 20D38 Exercício: Suponha um sistema posicional de numeração na base 6. Determine os valores de R, S, T, V, X e Z. RVTZR + SRSVZ TFXVZS Inicialmente, devemos considerar que cada uma das letras representa um algarismo, sem qualquer valor pré-determinado. a) T = 1, porque: T só pode ser 1; a soma de dois algarismos, em qualquer base b, será no máximo igual a (2b) -1 e portanto o "vai-um" nunca será "vai dois"!. b) V = 0, porque: como Z + V = Z, concluimos que V = 0 e a soma R + Z = S (não vai-um). c) S = 5, porque T + S = 0 o que significa que T + S = 6 (porque não pode ser 0, logo é 0 + base = 6 e vai um para a próxima casa) e como T = 1, temos portanto S = 5. d) Assim, R + V = X, como V = 0 e veio 1 da casa anterior, temos que X = 1 + R Substituindo, temos que R + S = Z + 6 logo R - Z = 1 R + Z= 5; somando as expressões, temos 2R = 6 ou R = 3 logo Z = 2 e X = 4 24 ARITMÉTICA EM COMPLEMENTO - SOMA EM COMPLEMENTO A UM O algoritmo da soma em complemento a um é: a) Somar os dois números, bit a bit, inclusive o bit de sinal. b) Avaliação dos casos de "vai-um": b.1) Se não ocorreu vai-um para o bit de sinal nem para fora do número: --- este é o resultado correto; b.2) Se ocorrer "vai-um" só para o bit de sinal (e não para fora do número): --- incorreto - ocorreu overflow ------- (isto significa que o resultado excede a faixa de representação para o número de bits adotado). b.3.1) Se ocorrer "vai-um" para fora do número: --- para obter o resultado final, soma-se o "vai-um" externo (para fora do número) ao resultado da soma; o bit para fora do número (que excede o número de bits adotado na representação)é desprezado. b.3.2) Nesta soma final também pode ocorrer "vai-um" no último bit; --- se o número de "vai-um" ocorridos (para o bit de sinal, para fora do número ou na soma final) for par (o que equivale a inverter duas vezes o sinal), ------ o resultado está correto; --- se o número for ímpar (1 ou 3 "vai-um"): ------ o resultado está incorreto - ocorreu overflow. Exemplos (referidos aos casos acima), considerando representação com 6 bits: caso b.1: 15 +10 = 2510 caso b.2: 15 + 22 = 3710 caso b.3: -15 -10 = -2510 caso b.3: -15 -22 = -3710 _111 1111 11 1 001111 (+) 001111 (+) 110000 (-) 110000 (-) +001010 (+) +010110 (+) +110101 (-) +101001 (-) 011001 (+) 100101 (-) 100101 011001 +______1 +______1 100110 (-) 011010 (+) CORRETO OVERFLOW CORRETO OVERFLOW (não ocorreu "vai- um") (só ocorreu "vai-um" para o bit de sinal) (ocorreu "vai-um" p/ bit de sinal e p/ fora do nº mas não na soma final - nº de "vai-um" é par) (ocorreu "vai-um" só p/ fora do nº mas não na soma final - nº de "vai- um" é ímpar) obs.: soma de dois nº positivos não poderia dar negativo obs.: soma de dois nº negativos não poderia dar positivo A faixa de representação com 6 bits em C1 vai de -31 a +31. Conferindo as contas pela representação decimal, vemos que os resultados fora desta faixa excedem a faixa da representação e não podem ser representados com 6 bits (portanto, com este número de bits, ocorre overflow). Existe um teste prático que, quando ambos os números tem o mesmo sinal, pode mostrar se ocorreu overflow e o resultado obtido está incorreto: basta ver que na soma de dois números negativos, o resultado só pode ser negativo, e a soma de dois números positivos só poderia dar resultado positivo! 25 ARITMÉTICA EM COMPLEMENTO - SOMA EM COMPLEMENTO A DOIS O algoritmo da soma (ou subtração) em complemento a dois é: a) Somar os dois números, bit a bit, inclusive o bit de sinal. b) Despreza-se o bit para fora do número, se houver. c.1) Se não ocorreu vai-um para o bit de sinal nem para fora do número ou c.2) Se ocorrer "vai-um" tanto para o bit de sinal quanto para fora do número (equivale a inverter duas vezes o sinal): --- o resultado está correto; d.1) Se ocorrer "vai-um" só para o bit de sinal (e não para fora do número): d.2) Se não ocorrer "vai-um" para o bit de sinal e somente ocorrer para fora do número: --- o resultado é incorreto - ocorreu overflow ------- (isto significa que o resultado excede a faixa de representação para o número de bits adotado). Nota: Podemos constatar que o algoritmo de soma em C2 é bem mais simples que o de soma em C1. Exemplos (referidos aos casos acima), considerando representação com 6 bits: caso c.1: 15+10 = 2510 caso d.1: 15 + 17 = 3210 caso c.2: -15 -10 = -2510 caso c.2: -15 -17 = -3210 caso d.2: -15 -27 = -4210 _111 11111 1 111111 1____1 001111 (+) 001111 (+) 110001 (-) 110001 (-) 110001 (-) +001010 (+) +010001 (+) +110110 (-) +101111 (-) +100101 (-) 011001 (+) 100000 (-) 100111 (-) 100000 (-) 010110 (+) CORRETO OVERFLOW CORRETO CORRETO OVERFLOW (não ocorreu "vai-um") (só ocorreu "vai- um" para o bit de sinal) (ocorreu "vai- um" p/ bit de sinal e p/ fora do nº - o nº de "vai- um" é par) (ocorreu "vai- um" p/ bit de sinal e p/ fora do nº - o nº de "vai- um" é par) (só ocorreu "vai- um" p/ fora do nº - o nº de "vai-um" é ímpar) obs.: soma de nº positivos não poderia dar negativo (despreza-se o "vai-um" para fora do número) (despreza-se o "vai-um" para fora do número) obs.: soma de nº negativos não poderia dar positivo (despreza "vai-um" p/ fora do nº) A faixa de repreentação com 6 bits em C2 vai de -32 a +31. Conferindo as contas pela representação decimal, vemos que os resultados fora desta faixa estão necessariamente incorretos (ocorreu overflow) Pode-se aplicar o mesmo teste prático que, quando ambos os números tem o mesmo sinal, pode mostrar se ocorreu overflow e o resultado obtido está incorreto: basta ver que na soma de dois números negativos, o resultado só pode ser negativo, e a soma de dois números positivos só poderia dar resultado positivo! 26 ARITMÉTICA EM SINAL E MAGNITUDE Em sinal e magnitude, o algoritmo da soma é: a) Se os números forem de mesmo sinal, basta somar os dois números e manter o sinal; b) Se os números forem de sinais diferentes, subtrai-se o menor número do maior; o sinal será o do maior número. c) Tem-se overflow sempre que ocorrer "vai-um" da magnitude para o bit de sinal (o número de bits da magnitude foi excedido). __1 11 0010 (positivo) 1001 (negativo) 0110 (positivo e maior) 1110 (negativo e maior) 1110 (negativo) +0101 (positivo) +1101 (negativo) +1010 (negativo e menor) +0100 (positivo e menor) +1101 (negativo) 0111 1110 0100 1010 1011 CORRETO CORRETO CORRETO CORRETO OVERFLOW ambos positivos -> soma e mantém o sinal positivo ambos negativos -> soma e mantém o sinal negativo sinais contrários -> subtrai maior magnitude é positivo -> resultado é positivo sinais contrários -> subtrai maior magnitude é negativo -> resultado é negativo ambos negativos -> soma "vai-um" para bit de sinal -> overflow 27 REPRESENTAÇÃO DE NÚMEROS REAIS Até agora, passamos por cima de alguns outros problemas. Os dados numéricos podem ser fracionários (tais como 57,683). Como representar essa parte fracionária (após a vírgula que a separa da parte inteira), de forma que permita processamento eficiente e armazenamento com pouco consumo de memória? Vamos analisar esses problemas logo à frente. NÚMEROS REAIS Números reais são aqueles com parte fracionária (por exemplo, 57,683). Estamos acostumados a representar esses números no formato parte inteira, vírgula (ou ponto), parte fracionária: Esta representação, embora cômoda para cálculos no papel, não é adequada para processamento no computador. 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 2-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. 28 REPRESENTAÇÃO DE NÚMEROS REAIS NO COMPUTADOR Uma forma comum de representação de números reais no computador pode ser expressa como segue: Pode-se notar que a base não é expressa. Como a base, para cada computador, será sempre a mesma, não há necessidade de apresentar a base na representação (no exemplo, a base é 2). Dizemos que a base é implícita. Para cada computador, o número total M de bits para a representação, o número de bits para SN (sinal do número), para SE (sinal do expoente), para a mantissae para o expoente, são pré-definidos em projeto. Assim, podemos concluir que, quanto maior o número de bits para o expoente, maior será a faixa de números que o computador pode representar (maior alcance); e quanto maior o número de bits para a mantissa, maior a precisão da representação. Porém, reduzindo-se a mantissa, perde-se precisão e há maior a necessidade de truncar o número (truncar um número é cortar algarismos significativos que não podem ser representados). Considerando-se a representação acima, na base implícita 2: maior expoente possível E: 2x – 1 maior mantissa possível: 2y – 1 maior número real: +(0.111...1 x 2E) sendo E = 2x – 1 menor número real: -(0.111...1 x 2E) sendo E = 2x – 1 menor real positivo: +(0.100...0 x 2 -E sendo E = 2x – 1 maior real negativo: -(0.100...0 x 2 -E sendo E = 2x – 1 29 FAIXA DE REPRESENTAÇÃO Como vimos anteriormente, a representação em ponto flutuante tem limites de alcance e de precisão. O alcance é limitado pelo número de bits do expoente. A precisão é determinada pelo número de bits da mantissa. Ocorre overflow quando o valor absoluto do dado a ser representado excede a capacidade de representação, porque o número de bits do expoente (neste caso, positivo) é insuficiente para representar o dado. Um outro problema ocorre na região de números próximos de zero, que tem o maior expoente negativo possível. Ocorre underflow quando o valor absoluto do dado a ser representado é tão pequeno que fica menor que o menor valor absoluto representável. Nesse caso, o expoente é negativo mas não representa os números muito próximos de zero e ocorre uma descontinuidade na representação, com os números próximos a zero não sendo representados. Underflow não é o mesmo que imprecisão. Dados na faixa de underflow não podem ser representados, ocorrendo estouro no expoente. No caso de imprecisão, a normalização permite que o dado seja representado, porém com perda de precisão. CARACTERÍSTICA Característica é o expoente, representado na forma de excesso de n, ou seja, CARACTERÍSTICA = EXPOENTE + EXCESSO A representação substituindo expoente por característica acarreta que todas as características serão positivas, de forma que é possível eliminar a representação do sinal do expoente. Se CARACTERÍSTICA = EXPOENTE + EXCESSO, sendo M o número de bits para a representação da característica, temos: 0 = - 2M-1 + EXCESSO logo: EXCESSO = + 2M-1 30 EXEMPLO DE REPRESENTAÇÃO EM PONTO FLUTUANTE a) Representação no IBM /370 A família IBM /370 representa os dados em ponto flutuante com base implícita = 16, no seguinte formato: sendo SN = sinal do dado CARACTERÍSTICA = o expoente, representado na forma de excesso de n, ou seja, CARACTERÍSTICA = EXPOENTE + EXCESSO No caso da IBM, o excesso é de 6410, portanto: CARACTERÍSTICA = EXPOENTE + 6410 Exemplificando: expoente = 810, logo característica = 810 + 6410 = 7210 Assim, uma característica entre 0 e 6310 significa que o expoente é negativo, enquanto uma característica entre 65 e 127 significa que o expoente é positivo (característica igual a 6410 significa expoente igual a 0). Exemplo: Representar 25,510 Como a base implícita é 16, vamos converter para hexadecimal: 25 / 16 = 1, resto 9 logo: 2510 = 1916 Parte fracionária: 0.5 x 16 = 8,0 Logo: 25,510 = 19,816 x 160 Normalizando: 19,816 x 160 = 0,19816 x 162. Em binário com 24 bits, a mantissa normalizada será: 0,19816 = 0001.1001.1000.0000.0000.0000 Obs.: Como o número 0,19816 será representado em 24 bits, os bits não representativos (à direita) serão preenchidos com zeros. Como o expoente é 2, a característica será: 210 + 6410 = 6610. Em binário com 7 bits, será: 100.0010 Portanto, a representação será: 31 b) Representação no PDP 11 Os microcomputadores PDP 11 representam os dados em ponto flutuante com base implícita = 2, no seguinte formato: sendo SN = sinal do dado CARACTERÍSTICA = o expoente, representado na forma de excesso de n, ou seja, CARACTERÍSTICA = EXPOENTE + EXCESSO No caso do PDP 11, o excesso é de 12810, portanto: CARACTERÍSTICA = EXPOENTE + 12810 Exemplificando: expoente = - 28 logo característica = - 2810 + 12810 = 10010 Assim, uma característica entre 0 e 12710 significa que o expoente é negativo, enquanto uma característica entre 129 e 255 significa que o expoente é positivo (característica igual a 1280 significa expoente igual a 0). Exemplo: Representar 25,510 Como a base implícita é 2, vamos converter para binário: 2510 = 110012 Parte fracionária: 0.5 x 2 = 1,0 Logo: 25,510 = 11001,12 x 20 Normalizando: 11001,12 x 20 = 0,1100112 x 25. Obs.: Como a base implícita no PDP 11 é 2, o número normalizado começará SEMPRE por 0,1. Assim, como o primeiro dígito da mantissa será sempre 1, o PDP 11 economiza um bit na mantissa não armazenando o primeiro bit da mantissa, já que está implícito que todos os números terão mantissa iniciando com 1. O bit economizado dessa forma permite que, embora a mantissa no PDP seja representada com 23 bits e no IBM /370 com 24 bits, a precisão na representação é a mesma. Obs.1: Leia-se o SEMPRE da obs. acima como quase sempre . A única exceção corre por conta do zero, que nesse caso tem um tratamento especial. Em binário com 23 bits, a mantissa normalizada será (lembrando que o primeiro bit 1 não é representado): 0,1100112 = 100.1100.0000.0000.0000.0000 Obs.: Como o número 0,1100112 será representado em 23 bits, os bits não representativos (à direita) serão preenchidos com zeros. Como o expoente é 5, a característica será: 510 + 12810 = 13310. Em binário com 8 bits, será: 1000.0101 Portanto, a representação será: 32 Exercício: Qual das representações de ponto flutuante nos dois computadores exemplificados acima tem o maior alcance? Resp.: O alcance de uma representação depende do valor da base implícita, elevado ao maior valor que a característica pode assumir. O maior alcance será o que tiver o maior valor de Be ou seja, base elevada ao maior valor possível da característica. O IBM /370 tem 7 bits para característica (maior característica = 63) e base implícita 16, portanto 1663 = (24) 63 = 2252 O PDP tem 8 bits para característica (maior característica = 127) e base implícita 2, portanto 2127 Conclusão: A representação em ponto flutuante do IBM /370 tem maior alcance que a do PDP 11. REPRESENTAÇÃO DE CARACTERES E SÍMBOLOS A representação de caracteres e símbolos em computador é feita atribuindo-se a cada caractere ou símbolo um código binário. Desta forma são construídas tabelas (padrões) em que cada código binário representa para o computador um determinado caractere ou símbolo. Cada computador (ou cada fabricante) adota um determinado padrão. O número de bits que será utilizado no padrão é uma decisão do fabricante e determinará quantos caracteres (e símbolos) poderão ser representados. Nota: Se um padrão utiliza 7 bits, será possível representar até 27 = 128 caracteres e símbolos e com 8 bits serão 28 = 256. O principal padrão hoje utilizado é o ASCII, de 7 bits, com uma variação de 8 bits (ASCII extendido) em que o 8º bit permite representar outros 128 símbolos. Nota 1: Nos computadores PC, devido às diferenças lingüísticas, com a necessidade de representar caracteres diferentes para para dar suporte a outras línguas que não o inglês, foram criadas diversas "páginas de código". Por exemplo, a página de código 437 refere-se aos Estados Unidos, a 850 é a Multilingüe (Latin I), a 860 para Português (incluindo caracteres que não existem no inglês, tais como ç e os acentos). Nota 2: ASCII é um acrônimo para American Standard Code for Information Interchange (ou Código Padrão Americano para Intercâmbio de Informações). 33 A seguir, apresentamos alguns exemplos de códigos da tabela ASCII: Decimal Binário Caractere 48 a 57 0011.0000 a 0011.1001 de 0 até 9 (algarismos) 65 a 90 0100.0001 a 0101.1010 de A até Z (maiúsculas)97 a 122 0110.0001 a 0111.1010 de a até z (minúsculas) 36 0010.0100 $ 42 0010.1010 * 43 0010.1011 + 63 0011.1111 ? 64 0100.0000 @ 128 1000.0000 Ç 135 1000.0111 ç 132 1000.0100 ã 142 1000.1110 Ã 172 1010.1100 ¼ 167 1010.0111 º 166 1010.0110 ª 225 1110.0001 ß 241 1111.0001 ± Nota: Até 127, os códigos pertencem à tabela ASCII padrão, enquanto os códigos entre 128 e 255 fazem parte do ASCII extendida, podendo variar o caractere ou símbolo representado conforme a página de código configurada. Outros padrões foram e ainda são usados, por exemplo o EBCDIC (Extended Binary Coded Decimal Interchange Code, de 8 bits, usados nos computadores de grande porte IBM). 34 Capítulo 4 – Organização Interna de um Computador Vimos que um sistema de computador é um conjunto de componentes que são integrados para funcionar como um único elemento e tem por objetivo realizar manipulações com dados; isto é, realizar algum tipo de operação com os dados de modo a obter informações úteis. 4.1 MODELO DE VON NEUMANN Para podermos entender a importância da arquitetura Von Neumann vamos começar fazendo uma pergunta: qual a diferença entre uma calculadora e um computador? Uma calculadora básica realiza apenas as funções pré-determinadas em seu teclado. Se desejarmos fazer um novo tipo de operação, isto só será possível com a modificação dos circuitos eletrônicos que compõem a calculadora, além do seu teclado, para a inclusão da nova função. Não há, portanto, flexibilidade para realizar alterações na calculadora para se adaptar a novas aplicações. O computador, por sua vez, é um equipamento que oferece a possibilidade de ser configurado facilmente para novas tarefas, de acordo com as necessidades de cada aplicação que for requerida pelo usuário. A grande inovação da proposta de Von Neumann foi uma nova forma de organização para o computador que permitisse um alto grau de flexibilidade, de forma a adaptá-lo facilmente para diversas aplicações. Modelo de Von Neumann O conceito de programa armazenado foi um dos conceitos fundamentais apresentados por Von Neumann que permitiu essa flexibilidade. Em seu modelo de computador foi introduzido o conceito de memória, um dispositivo de armazenamento temporário, para onde programas (e dados) diferentes poderiam ser carregados a partir de uma unidade de entrada, para serem executados pela unidade aritmética e lógica, com os resultados sendo transferidos da memória para uma 35 unidade de saída, tudo isso sob a coordenação de uma unidade de controle. Deste modo, ficava garantida a flexibilidade do computador, que pode ter o seu funcionamento facilmente alterado mediante o uso de programas e dados diferentes, de acordo com a aplicação de cada usuário. Sendo mais formal, os componentes da máquina de Von Neumann (Figura) podem ser descritos assim: Memória: É a unidade onde as instruções, os dados de entrada, as tabelas de referência, e os resultados intermediários devem ser armazenados para permitir a execução de um programa. Controle: É a unidade responsável pelo seqüenciamento das operações e pelo controle das demais unidades do computador. Aritmética: É a unidade que irá executar as operações aritméticas e lógicas tais como: soma, subtração, multiplicação, divisão, raiz quadrada, movimentação entre a unidade aritmética e a memória, verificação do sinal do resultado, conversão de decimal para binário e vice-versa. Um total de 10 operações fundamentais foi definido por Von Neumann. É chamada abreviadamente de UAL. Entrada: É a unidade que transfere a informação (numérica ou não) do meio externo. Todas as transferências devem ser feitas para a memória e nunca diretamente para a unidade de controle. Saída: É a unidade que transfere a informação (numérica ou não) para o meio externo. Todas as transferências devem ser feitas da memória para o meio externo, e nunca diretamente da unidade de controle. Von Neumann, em uma analogia com o comportamento dos neurônios, sugere o uso da numeração binária para a representação interna dos números, ao invés da numeração decimal, pela evidente economia que isto proporciona no tempo gasto nos cálculos e na complexidade dos circuitos. As válvulas foram escolhidas como elementos básicos por serem dispositivos com o menor tempo de chaveamento (mudança do valor lógico 0 para o valor lógico 1) existentes com a tecnologia disponível naquela época. O uso de um sinal elétrico periódico para cadenciar todas as operações do computador foi também proposto, dando origem ao que chamamos de relógio do computador. Este modelo de organização proposto por Von Neumann continua sendo utilizado no projeto dos processadores comerciais nos dias de hoje. O estudo de suas características permite uma compreensão adequada do funcionamento dos computadores utilizados comercialmente hoje em dia. 36 4.2 MODELO DE BARRAMENTO DE SISTEMA O modelo de Von Neumann passou por um refinamento que recebeu o nome de modelo de barramento de sistema (Figura acima). Nesse modelo, a unidade de controle e a unidade aritmética são vistas como um só elemento e recebem o nome de processador. As unidades de entrada e saída são vistas também em uma única unidade, chamada agora de unidade de entrada/saída. A memória continua sendo vista com uma unidade independente, com as mesmas funções da arquitetura de Von Neumann. Um elemento novo que surge é o próprio barramento de sistema, que faz a interligação entre o processador, a memória e a unidade de entrada/saída. O barramento de sistema é composto pelos barramentos de endereço, dados e controle. O barramento de endereços transporta os sinais de endereço através de fios ou trilhas até a memória. Sinais estes que vão, principalmente, determinar qual a posição de memória que irá ser lida ou escrita. Os endereços podem ser fornecidos tanto pelo processador como pela unidade de entrada/ saída. A informação dessa posição de memória, que está sendo lida ou escrita na memória, transita pelo barramento de dados, que é bidirecional. Apesar do nome, tanto instruções como os dados propriamente ditos circulam por esse barramento. O barramento de controle indica qual a natureza da operação que vai ser realizada: leitura ou escrita, na maior parte dos casos, e possui também sinais para a arbitragem do barramento, para determinar quem vai utilizar o barramento naquele momento, que pode ser tanto o processador como a unidade de entrada/saída. Eventualmente, nos modernos computadores, existe também um barramento dedicado para ligar os periféricos à unidade de entrada/saída. Isso permite que o acesso do processador à memória se faça com maior eficiência, pela diminuição do tráfego de dados no barramento de sistema. A seguir vamos examinar cada um dos componentes do modelo de barramento de sistema com mais detalhes. ü Unidade Central de Processamento (Processador) ® é o componente vital do sistema de computação, responsável pela realização das operações de processamento (os cálculos matemáticos com os dados, etc.) e pelo controle de quando e o que deve ser realizado, durante a 37 execução de um programa. Tal controle é realizado através da emissão de sinais apropriados de controle. A função da UCP consiste, então, em: a) buscar uma instrução na memória, uma de cada vez; b) interpretar que operação a instrução está explicitando (pode ser e soma de dois números, uma multiplicação, etc.); c) buscar os dados onde estiverem armazenados, para trazê-los até a UCP; d) executar efetivamente a operação com os dados, guardar o resultado no local definido na instrução; e) reiniciar o processo apanhando nova instrução. ü Memória ® é o componente de um sistema de informação cuja função é armazenar as informações que são, foram ou serão manipuladas pelo sistema. Os programa e os dados são armazenados na memória para execução imediata (memória principal) ou para execução ou uso posterior(memória secundária). Há duas únicas ações que podem ser realizadas: 1) a de guardar um elemento na memória, então chamamos de armazenar e a operação associada a esta ação é de escrita ou gravação (“write”) ou 2) recuperação de um elemento da memória, ação de recuperar, e operação de leitura (“read”). ü Dispositivos de Entrada e Saída ® serve basicamente para permitir que o sistema de computação se comunique com o mundo externo, realizando ainda, a interligação, a conversão das linguagens do sistema para a linguagem do meio externo e vice-versa. Os seres humanos entendem símbolos como A, b, *, ?, etc. e o computador entende sinais elétricos que podem assumir um valor de +3Volts para representar 1 e ou outro valor, 0 Volts para representar 0. O teclado (dispositivo de ENTRADA) interliga o usuário e o computador, por exemplo, quando pressionamos a tecla A, os circuitos eletrônicos existentes no teclado “convertem” a pressão mecânica em um grupo de sinais elétricos, alguns com voltagem alta (bit 1) e outras com voltagem baixa (bit 0), que corresponde, para o computador, ao caractere A. Os dispositivos de SAÍDA operam de modo semelhante, porém em sentido inverso, do computador para o mundo exterior, convertendo os sinais elétricos em símbolos conhecidos por nós. 4.3 BIT, CARACTERE, BYTE E PALAVRA: ü Bit ® é a menor unidade de informação armazenável em um computador. Bit é a contração das palavras inglesas Binary Digit. O bit pode ter, então, somente dois valores: 0 e 1. Evidentemente, com possibilidades tão limitadas, o bit pouco pode representar isoladamente; por essa razão, as informações manipuladas por um computador são codificadas em grupos ordenados de bits, de modo a terem um significado útil. ü Caractere ® é o menor grupo de bits representando uma informação útil e inteligível para o ser humano. Qualquer caractere a ser armazenado em um sistema de computação é convertido em um conjunto de bits previamente definidos para o referido sistema (chama-se código de representação de caracteres). Cada sistema poderá definir como (quantos bits e como se organizam) cada conjunto de bits irá representar um determinado caractere. 38 ü Byte ® é o grupo de 8 bits, tratados de forma individual, como unidade de armazenamento e transferência. Como os principais códigos de representação de caracteres utilizam 8 bits por caractere, os conceitos de byte e caractere tornam-se semelhantes e as palavras, quase sinônimas. É costume, no mercado, construírem memória cujo acesso, armazenagem e recuperação de informações são efetuadas byte a byte (ou caractere a caractere). Por exemplo, 16 Kbytes de memória ou 12 Mbytes. O K e M, são letras indicativas de um valor numérico fixo, utilizado para reduzir a quantidade de algarismos representativos de um número, onde K representa mil vezes e M milhões. Como os computadores são binários, toda indicações numéricas referem-se a potência de 2, ou seja, o K representa 210 = 1.024 unidades e M é 1.024 * 1.024 = 1.048.576 caracteres ou bytes. ü Palavra ® é um conjunto de bits que representam uma informação útil, mas estaria associada ao tipo de interação entre a MP (memória principal) e a UCP, que é individual, informação por informação, ou seja, a UCP processa informação por informação, armazena e recupera número a número (cada uma estaria associada a uma palavra). De modo geral, usam-se dois valores diferentes: um relacionado à unidade de armazenamento – o byte e o outro para indicar a unidade de transferência e processamento – a palavra (que na quase totalidade de computadores, possui um número de bits múltiplo de 1 byte – 16 ou 32 bits é o valor mais comum. 4.4 CLASSIFICAÇÃO DE SISTEMAS DE COMPUTAÇÃO: ü Microcomputadores ® surgiram comercialmente por volta de 1974, através do desenvolvimento dos microprocessadores (todos os componentes de uma UCP em uma única pastilha) e o nome foi justamente devido ao tamanho e à capacidade de processamento, ambos pequenos em relação ao que já existia no mercado. Há no mercado várias categorias de microcomputadores, classificadas quanto ao tamanho físico do equipamento e a sua portabilidade: a) Mesa ou desktop; b) Torre (maior disponibilidade para instalação de dispositivos de entrada e saída); c) Laptops; d) Notebooks e sub-notebooks; e) Palmtops. ü Estação de Trabalho ® é essencialmente um microcomputador projetado para realizar tarefas pesadas, em geral na área científica ou industrial, tais como complexas computações matemáticas e a composição, manipulação e apresentação de gráficos e imagens de altíssima resolução. Especialmente no que se refere a velocidade do processador e a capacidade de memória, a potência de uma estação de trabalho é semelhante à de um minicomputador. Ex: IBM RS/6000. ü Minicomputadores ® são máquinas projetadas para atender simultaneamente a demanda por execução de programas de vários usuários, embora a quantidade de usuário e de programas não seja tão grande quanto se pode encontrar em computadores de grande porte. A capacidade de suportar múltiplos usuários e programas requer além de velocidade de processamento e 39 capacidade/velocidade de memória, uma extensa potencialidade para manipular diversos dispositivos de entrada e saída. Ex: IBM AS/400. ü Computador de Grande Porte ® são sistemas projetados para manusear considerável volume de dados e executar simultaneamente programas de uma grande quantidade de usuários. Essas máquinas podem interagir com centenas de usuários em um dado instante, como, por exemplo, um sistema de reserva de passagens aéreas, bem como uma contínua solicitação de processamento por parte dos incontáveis terminais conectados diretamente ao sistema, aos quais os computadores têm que atender e responder em poucos segundos. Ex: IBM 3090 e Control Data CDC 6600. ü Supercomputadores ® são projetados primariamente para atender a um único propósito: realizar grandes quantidades de cálculos matemáticos o mais rapidamente possível, tipo previsão do tempo, simulação, modelagem tridimensional, etc. Ex: IBM 9021 e CRAY Y-MP. 4.5 MEDIDAS DE DESEMPENHO DE SISTEMA DE COMPUTADORES: A medida geral de desempenho de um sistema de computador depende fundamentalmente da capacidade e velocidade de seus diferentes componentes, da velocidade com que estes se comunicam entre si e do grau de compatibilidade que possa existir entre eles. ü Desempenho dos Processadores ® é medido em termos de sua velocidade de trabalho; como seu trabalho é executar instruções, criou-se a unidade chamada MIPS – milhões de instruções por segundo e também a unidade MFLOPS – milhões de operações de ponto flutuante por segundo, que é uma medida típica de estações de trabalho e de supercomputadores, pois estes costumam trabalhar mais com cálculos matemáticos. ü Tempo de Acesso ® é uma unidade de medida mais apropriada, estando relacionada à velocidade de cada componente e à do canal de interligação entre os dois (UCP e memória). ü Tempo de Resposta ® é a medida ligada ao desempenho global do sistema e não de um ou outro componente. Trata-se do período de tempo gasto entre o instante em que o usuário iniciou uma solicitação ou interrogação e o instante em que o sistema apresentou ao usuário a sua resposta ou atendeu à sua solicitação. Ex: o intervalo de tempo entre a solicitação de um saldo de conta em um terminal bancário e apresentação no vídeo da resposta (o saldo da conta). ü Vazão (throughput) ® define a quantidade de ações ou transações que podem ser realizadas por um sistema na unidade de tempo. Por exemplo, a quantidade de atualizações que podem ser feitas em um sistema de controle do estoque de uma empresa. 40 Capítulo 5 – Funções de cada Componente de um Computador Iremos detalhar neste capítulo os aspectos que envolvem os componentes do sistema computador: Processador, Memória e Entrada e Saída. 5.1 UNIDADE CENTRAL DE PROCESSAMENTOA Unidade Central de Processamento - UCP (em inglês, Central Processing Unity - CPU) é a responsável pelo processamento e execução dos programas armazenados na MP. As funções da UCP são: executar as instruções e controlar as operações no computador. Um programa, para ser efetivamente executado pelo processador, deve ser constituído de uma série de instruções de máquina. Para que a execução tenha início, as instruções devem ser armazenadas em células sucessivas, na MP. A função da UCP consiste, então, em: a) Buscar uma instrução na memória (operação de leitura), uma de cada vez; b) Interpretar que operação a instrução está explicitando (pode ser soma de dois números, uma multiplicação, uma operação de entrada ou de saída de dados, ou ainda uma operação de movimentação de um dado de uma célula para outra); c) Buscar os dados onde estiverem armazenados, para trazê-los até a UCP; d) Executar efetivamente a operação com os dados, guardar o resultado (se houver algum) no local definido na instrução; e, finalmente; e) Reiniciar o processo apanhando nova instrução. Estas etapas compõem o que se denomina um ciclo de instrução. Este ciclo se repete indefinidamente (ver Figura 5.8) até que o sistema seja desligado, ou ocorra algum tipo de erro, ou seja, encontrada uma instrução de parada. As atividades realizadas pela UCP podem ser divididas em duas grandes categorias funcionais: função processamento e função controle. 5.1.1 Função Processamento Vimos que processamento de dados é a ação de manipular um ou mais valores (dados) em certa seqüência de ações, de modo a produzir um resultado útil. O resultado muda conforme o tipo de operação realizada. Por exemplo, se uma instrução define que deve ser realizada uma operação de adição sobre os valores A = 5 e B = 3, o sistema, ao interpretar a instrução, gera as ações subseqüentes que redundarão no resultado igual a 5+3 = 8. Por outro lado, se o sistema interpretar uma outra instrução que define a operação de subtração, ele deve gerar outras ações de modo que o resultado seja 5-3 = 2 (e não mais 8). Processar o dado é executar com ele uma ação que produza algum tipo de resultado. Este é, pois, a atividade-fim do sistema; ele existe para processar dados. O dispositivo principal desta área de atividade de uma UCP é chamado ULA – Unidade Lógica e Aritmética. Os demais componentes relacionados com a função processamento são os registradores, que servem para armazenar dados (ou para guardar resultados) a ser usados pela ULA. A interligação entre estes componentes é efetuada pelo barramento interno da UCP. Figura 5.8 – Ciclo de Instrução. 41 5.1.1.1. Unidade Lógica e Aritmética – ULA: É o dispositivo que realmente executa as operações matemáticas com os dados. Tais operações podem ser: Soma Subtração Multiplicação Divisão Op. Lógica AND Op. Lógica OR Op. Lógica XOR Op. Complemento Deslocamento à direita Deslocamento à esquerda Incremento Decremento Tais operações podem utilizar dois valores (operações aritméticas e lógicas), por isso a ULA possui duas entradas, ver Figura 5.9, ou apenas um valor (operações com complemento). A ULA é um aglomerado de circuitos lógicos e componentes eletrônicos simples que, integrados, realizam as operações já mencionadas. Figura 5.9 – Esquema da UCP, destacando-se os elementos que contribuem para a realização da função processamento. 5.1.1.2. Registradores: Para que o dado seja transferido para a ULA, é necessário que ele permaneça, mesmo que por um breve instante, armazenado em um registrador (a memória da UCP). Além disso, o resultado de uma operação aritmética ou lógica realizada na ULA deve ser armazenado temporariamente, de modo que possa ser reutilizado mais adiante (por outra instrução) ou apenas para ser, em seguida, transferido para a memória. Para atender a este propósito, a UCP é fabricada com certa quantidade de registradores, destinados ao armazenamento de dados. Serve de memória auxiliar da ULA. Há sistemas nos quais um desses registradores, denominado Acumulador – ACC, além de armazenar dados, serve de elemento de ligação da UAL com os restantes dispositivos da UCP. Em geral, os registradores de dados da UCP têm uma largura (quantidade de bits que podem armazenar) igual à da palavra. O tamanho dos processadores IBM/370 era de 32 bits, a mesma Sendo que os elementos em amarelo, da UCP, são os que contribuem para a realização da função processamento. 42 largura dos 16 registradores de emprego geral neles existentes. O microprocessador Intel 8088, que moveu os primeiros sistemas IBM PC, possui registradores de 16 bits cada um, tamanho idêntico ao definido para a palavra. A quantidade e o uso dos registradores variam bastantes de modelo para modelo de UCP. As Figuras 5.10 e 5.11 apresentam exemplos de organização de registradores de dados em algumas UCP. Além dos registradores de dados, a UCP possui sempre outros registradores (que não participam diretamente da função processamento), com funções específicas ou que funcionam para a área de controle. Entre estes registradores podemos citar desde já o Registrador de Instrução – RI e o contador de instrução – CI, além do Registrador de Endereço de Memória – REM e o Registrador de Dados de Memória – RDM. Figura 5.10 – Diagrama (simplificado) em bloco da UCP Intel 8085, apenas com os dispositivos básicos da área de processamento. Figura 5.11 – Diagrama (simplificado) em bloco da UCP Intel 8086, mostrando apenas os dispositivos básicos da área de processamento. 5.1.1.2. A Influência do Tamanho da Palavra: A capacidade de processamento de uma UCP (a velocidade com que realiza o ciclo de uma instrução) é em grande parte determinada pelas facilidades embutidas no hardware da ULA (ela é, só hardware) para realizar as operações matemáticas projetadas. Um dos elementos fundamentais para isso é a definição do tamanho da palavra da UCP. O valor escolhido no projeto de fabricação da UCP determinará o tamanho dos elementos ligados à área de processamento, entre estes a ULA. Reg. Temp. Flags ULA Reg. Temp. AH AL BLBH CH CL OH DL Barramento Interno Reg. de Emprego geral AH + AL += 16 bits ULA = 16 bits B = C = D = E = H = L = 8 bits ULA = 8 bits ACC Reg. Temp. Flags ULA Reg. B Reg. C Reg. EReg. D Reg. H Reg. L Barramento Interno 43 Um tamanho maior ou menor de palavra (e, por conseguinte, da ULA, dos registradores de dados, do barramento interno) acarreta, sem dúvida, diferenças fundamentais de desempenho da UCP. Vejamos um exemplo simples sobre a influência do tamanho da palavra na capacidade de processamento. Vamos realizar a soma de dois valores, A = 3A25 e B = 172C, ambos números inteiros, sem sinal, com 16 bits de tamanho cada um. A referida soma será simulada em 2 sistemas de computação, sistema 1 e sistema 2. O sistema 1 possui palavras de 8 bit, e a memória principal tem 64K células de 8 bits cada uma, conforme mostrado na Figura 5.10. O sistema 2 possui palavras de 16 bits, e a memória principal possui um espaço de endereçamento de 1M células, todas também com 8 bits cada uma, conforme mostrado na Figura 5.11. Operação de soma no sistema 1: a) A operação é realizada em duas etapas lógicas, porque cada valor tem 16 bits e a UCP (ULA, registrador ACC e barramento de dados) só permite armazenar, processar e transferir dados com 8 bits de tamanho. b) Na primeira etapa são transferidos para a ULA, via ACC e barramento de dados, a 1a metade de cada número (25 para o número A e 2C para o número B) e eles são somados. c) Na segunda etapa a operação é realizada de forma idêntica, exceto para a 2a parte dos valores (3A para o número A e 17 para o número B). d) A operação completa gasta um período de tempo igual a T1. A Figura 5.12 mostra este exemplo em um digrama em bloco de uma UCP semelhante à do sistema 1, com a transferência dos valores sendo efetuada
Compartilhar