Fundamentos da Computação LFG-TI Um sistema analógico contém dispositivos que manipulam quantidades físicas que são repressentadas na forma analógica. Em sistemas analógicos, as quantidaddes físicas podem variar ao longo de uma faixa continua de valores. Por exemplo, as quantidades físicas podem variar ao longo de uma faixa continua de valores. Por exemplo, a amplitude do sinal de saída de um alto-falante em um receptor de rádio pode apresentar qualquer valor entre zero e o seu valor máximo (limite). Outros sistemas analógicos comuns são amplificadores de áudio, equipamentos de gravação/reprodução de fita magnética e um simples reguladore de luminosidade (dimmer). Apostila de Informática I. Fundamentos de computação 1.1. Introdução A Informática atua em todas as áreas do conhecimento humano. A sua utilização passou a ser um diferencial para pessoas e empresas, visto que, o controle da informação passou a ser algo essencial para se obter maior flexibilidade no mercado. Assim, o profissional, que melhor integrar sua área de atuação com a informática, atingirá, com mais rapidez, os seus objetivos e, conseqüentemente, o seu sucesso. Então o que vem a ser um computador? É um sistema constituído por HARDWARE , SOFTWARE e PEOPLEWARE. O que é um computador digital? Um computador digital é uma combinação de dispositivos e circuitos digitais que podem realizar uma seqüência programada de operações com mínima intervenção humana. A seqüência de operações é chmada de programa. O programa é um conjunto de instruções codificadas que é armazenado na memória interna do computador juntamente com todos os dados de que o programa necessita. Quando o computador é comandado a executar o programa, ele executa as instruções na ordem em que foram armazenadas na memória até que o programa termine. Ele faz isso em uma velocidade extremamente alta. HADWARE – Parte física COMPUTADOR SOFTWARE – Parte lógica PEOPLEWARE - Usuário 1.2. A evolução dos Computadores Eletrônicos. Os computadores eletrônicos evoluíram baseados em quatro gerações assim descritas: 1ª Geração(1951 – 1958) – Tinham como característica principal o uso de válvulas, alto consumo de energia e tamanho aproximado de 140m2 , geravam uma grande quantidade de calor. 2ª Geração(1959 – 1965) – Tinham como característica principal o uso de transistores, elemento que revolucionou o mundo da eletrônica, dando aos computadores mais rapidez e um tamanho bem menor que a geração anterior. 3ª Geração(1965 – 1969) – Tinham como característica principal o tamanho reduzido para médio e pequeno porte, ainda com o lançamento do IBM/360 esses computadores passaram a possuir a tecnologia dos circuitos integrados no seu modo primário. 4ª Geração(1970 até os dias atuais) – Característica principal: domínio da tecnologia dos Circuitos Integrados (semicondutores a silício) CHIP VLSI. Os processadores atuais utilizam de 22 a 30 milhões de transistores integrados na pastilha de silício. II. Como os computadores “pensam”? Computadores não pensam! O programador do computador fornece um programa de instruções e de dados que especificam cada detalhe sobre o que fazer e quando fazer. O computdor é simplesmente uma máquina de alta velocidade que pode manipular dados, resolver problemas e tomar decisões, tudo isso sob o controle de um programa. Se o programador cometer um erro no programa ou entrar com os dados errados, o computador produzirá resultados incorretos. Um ditado popular na computação diz “lixo na entrada – lixo na saída”. A organização básica de um computador. A organização básica de um computador consiste em máquinas que podem ser divididas em até seis níveis. O esquema abaixo mostra cada um dos níveis e o estado de cada nível em relação a atuação de cada nível. Começando pelo nível 0, na parte mais baixa do esquema temos ai o hardware da máquina. Abaixo desse nível ainda poderíamos falar do circuito eletrônico propriamente dito, mas isso não pertence ao escopo dos concursos para analistas de sistemas e sim para engenheiros eletricistas que precisam saber o a constituição física do transistor entre outras coisas. Dos padrões que frequentemente aparecem em concursos para analistas de sistemas o nível mais baixo que estudaremos será o da lógica digital, nível 0, onde são encontradas as portas (AND, OR, NOT, XOR) aquelas que possuem entradas binárias, e são compostas de transistores formando as portas. As portas podem formar, por exemplo, as memórias de 1 bit e que conjulgadas formam os registradores. Cada um dos seis níveis podem assim serem descritos: Organização e Arquitetura de Computadores Sistemas Analógicos e Digitais. Um sistema digital é uma combinação de dispositivos projetados para manipular informação lógica ou quantridades físicas que são representadas no formato digital; ou seja, assim as quantidades podem assumir apenas valores dicretos. Esses dispositivos são na maioria das vezes eletrônicos, mas podem, tambe, ser mecânicos, magnéticos ou pneumáticos. Alguns dos sistemas digitais mais conhecidos são s computdores digitais e as calculadoras, os equipamentos digitais de áudio e vídeo e o sistema de telefonia (o maior sistema digital do mundo). www.concursosdeti.com.br Prof. Bruno Guilhen 1 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI Prof. Bruno Guilhen Nível 0 – NÍVEL LÓGICO DIGITAL É considerado o hardware do computador sendo formado pelos circuitos eletrônicos (transistores), UCP, memória, disposistovos de E/S, dispositivos de comunicação e interfaces. Serve para executar as microinstruções do nível 1. do firmware, bem como, flexibilizar e possibitar o desenvolvimento de instruções mais potentes em nível de máquina convencional. A seguir é possível acompanhar o esquema de um compudor dividido em seis níveis. Nível 1 – NÍVEL DE MICROARQUITETURA Nesse nível os registradores formam a memória local e um circuito denominado ALU (Unidade Lógica e Aritmética) que é capaz de operações aritméticas simples. É o verdadeiro nível de linguagem de máquina. O microprograma, residente em memória permanente (ROM), compõe o que é conhecido por firmware em tem por função interpretar e traduzir as instruções que lhe são submetidas pelos níveis superiores. Nem todas as máquinas possuem este nível como é o caso das máquinas RISC. Algumas vantagens do nível de microprogramação sãode falicitar o projeto e a construção dos circuitos digitais, através da implementação de parte da lógica digital dentro Tradução (compilador) Nível de linguagem de montagem (Assembly) Nível 5 Nível 4 Nível 3 Nível 2 Nível 1 Nível 0 Nível de linguagem orientado a problemas Tradução (assembler) Nível do Sistema Operacional da máquina Interpretação parcial (S.O.) Nível de Arquitetura de conjunto de Instruções Interpretação (microprograma) Nível de Microarquitetura Hardware Nível lógico digital MEMÓRIA CENTRAL ( RAM / ROM) PERIFÉRICOS DE ENTRADA U.C.P. (U.L.A. / U.C./REG) PERIFÉRICOS DE SAIDA M E M Ó R IA SE C U N D Á R IA Figura 1 – Organização básica de um computador temporário para os dados dentro do CPU sem necessidade Todos os computadores contêm cinco elementos ou unidades de acessar a memória externa. essenciais: a unidade lógica e aritmética (ULA ou ALU), a unidade de memória, a unidade de controle, a unidade de entrada e a unidade de saída. A interconexão básica dessas III. Sistema de Numeração e Codificação unidades é mostrada na figura 1. As setas indicam a direção Infelizmente, o sistema de numeração decimal não é na qual os dados, as informações ou os sinais de controle conveniente para ser implementado em sistemas digitais. estão fluindo. Por exemplo, é muito difícil projetar um equipamento Na figura 1, a ULA e a unidade de controle são mostradas eletrônico para que ele opere com dez níveis de tensão combinadas em uma unidade denominada Unidade Central diferentes (cada um representando um caractere decimal, 0 de Processamento (UCP ou CPU). Isso é feito para separar a 9). Por outro lado, é muito fácil projetar um circuito o “cérebro” real do processador das outras unidades. Em um eletrônico simples e preciso que opere com apenas dois microprocessador, a CPU usualmente é implementada em níveis de tensão. Por esse motivo, quase todos os sistemas um único chip, o microprocessador. A CPU também tem um digitais usam o sistema de numeração binário (base 2) conjunto de registradores que realiza funções especiais. como sistema básico de numeração para suas operações, Esses registradores também possibilitam o armazenamento www.concursosdeti.com.br 2 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI embora outros sistemas de numeração sejam, muitas vezes, usados juntamente com o sistema binário. No sistema binário há apenas dois símbolos ou valores possíveis para os dígitos: 0 e 1, esse ssutena de base e também pode ser usado para representar qualquer quantidade que possa ser representada em decimal ou em qualquer outro sistema de numeração. Entretanto, é comum que o sistema binário use um numero maior de dígitos para expressar um determinado valor. No sistema binário, o termo digito binário (binary digit) é quase sermpre abreviado com o uso do termo bit, o qual será usado a partir de então. índice indicando a base em que está representado. Tem-se portanto, a seguinte equivalência: 101002 = 248 = 2010 = 1416 Teorema da Representação por Base Seja k qualquer inteiro maior que 1 (lembre que a palavra inteiro é usada apenas para números representados na base decimal). Então, para cada inteiro positivo n, existe uma representação (a prova deste teorema você encontra em qualquer bom livro de teoria numérica, como por exemplo, o de George E. Andrews). n = a0ks + a1ks-1 + ... + as onde a0>0 e cada ai é um inteiro não negativo maior que k. Esta representação de n é unica e é chamada de representação de n na base k. Exemplos: O Byte A maioria dos microcomputaodres manipula e armazena informações e dados binários em grupos de 8 bits, de modo que uma seqüência de 8 bits recebe um nome especial: ela é denominada byte. Um byte é constituído sempre de 8 bits e pode representar quaisquer tipos de dados ou informações. Como o computador utiliza dezenas, centenas e até bilhões de bytes, utiliza-se certas unidades de medida em bytes, como: 1 Kilobyte = 1 KB 1 Megabyte = 1MB 1 Gigabyte = 1GB 1 Terabyte = 1TB 1 Petabyte = 1PB 1 Exabyte = 1EB 1210 = 1.101 + 2.100 = 1210 1710 = 1.161 + 1.160 = 1116 1210 = 1.23 + 1.22 + 0.21 + 0.20 = 11002 1210 = 1.81 + 4.80 Nos próximos capítulos esse assunto de mudança de base será melhor abordado. 210 = 1.024 bytes (aprox. mil bytes) 220 = 1024 KB (aprox. 1 milhão de bytes) 230 B= 1.024 MB (aprox. 1 bilhão de bytes) 240 B= 1.024 GB (aprox. 1 trilhão de bytes) 250 B = 1024 TB 260B = 1024 PB Conversão entre Diferentes Bases As bases octal e hexadecimal também são muito úteis em computação. A base octal é representada com 8 dígitos que variam entre 0 e 7. A base hexadecimal é composta por dígitos e letras da seguinte forma: 0 a 9 e as letras a, b, c, d, e e f. A seguir será trabalhado os principais métodos de conversão em base. Lembre-se de que precisamos de 3 ou 4 dígitos binários para a mudança de base octal e hexadecimal, respectivamente. Sistema de numeração binário O sistema de numeração binário é o mais importante sistema de numeração em sistemas digitais, é um sistema posicional em que cada digito (bit) possui um certo peso de acordo com a posição relativa do bit menos significativo (LSB). Base de um Sistema de Numeração Como se sabe, em Eletrônica e Computação, as bases mais utilizadas para sistemas de numeração são: Binária (Base 2) Octal (Base 8) Decimal (Base 10) Hexadecimal (Base 16) Uma relação entre elas pode ser visualizada na tabela a seguir Binária Octal Decimal Hexadecimal 00000 00 00 00 00001 01 01 01 00010 02 02 02 00011 03 03 03 00100 04 04 04 00101 05 05 05 00110 06 06 06 00111 07 07 07 01000 10 08 08 01001 11 09 09 01010 12 10 0A 01011 13 11 0B 01100 14 12 0C 01101 15 13 0D 01110 16 14 0E 01111 17 15 0F De acordo com a tabela acima, o número decimal 20 é representado por 2010, isto é, escreve-se o número e um www.concursosdeti.com.br Prof. Bruno Guilhen Binário para Decimal 1001101(2) = 1x26+0x25+0x24+1x23+1x22+0x21+1x20 = 64 + 0 + 0 + 8 + 4 + 0 + 1 1100101(2) = 77(10) Decimal para Binário Há duas maneiras de converter um número decimal inteiro para seu equivalente no sistema binário. O primeiro método é quando o número decimal é simplesmente expresso como uma soma de potências de 2, e os bits 1s e 0s são colocados nos locais apropriados. Exemplo: 45(10) = 32 + 8 + 4 + 1 = 25 + 0 + 23 + 22 + 0 + 20 = 1 0 1 1 0 1(2) 45(10) = 101101(2) Observe que um bit 0 é colocado nas posições 21 e 24, visto que, todas as posições têm de ser consideradas. Um outro exemplo de conversão de decimal para binário é o método de divisões sucessivas por 2. Nesse método executa-se a divisão sucessiva pelo decimal 2 até achar um quociente 0, achando zero no quociente pega-se os restos 3 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI Prof. Bruno Guilhen O sistema de numeração hexadecimal usa a base 16. Assim, ele tem 16 símbolos. Vale lembrar que cada dígito hexadecimal é representado por um grupo de 4 digitos binários. E os dígitos hexadecimais de A até F são equivalentes aos valores decimais de 10 até 15. dessa divisão (que sempre é 0 ou 1) pegando da direita para a esquerda (será escrito de modo inverso) onde o primeiro binário ( o mais significativo, aquele que fica mais a esquerda) será o último resto. Por exemplo, o número 25 na base decimal quando convertido em binário por esse método fica: Conversão de hexadecimal para decimal Um número hexadecimal pode ser convertido para seu equivalente decimal devido ao fato de que a posição de cada digito hexa tem um peso que é uma potência de 16. De acordo com os mesmos métodos utilizados anteriormente. Veja um exemplo de conversão do número 356 da base hexadecimal para a base decimal. 25 12 + o resto 1 2 12 6 + o resto 0 2 6 3 + o resto 0 2 3 1 + o resto 1 2 1 0 + o resto 1 2 356(16) = 3 x 162 + 5 x 161 + 6 x 160 356(16) = 854(10) 2AF(16)= 2 x 162 + 10 x 161 + 15 x 160 2AF(16) = 687(10) 25(10) = 1 1 0 0 Conversão de decimal para hexadecimal Nesse caso o método de divisões sucessivas será usado novamente, só que neste caso essa divisão será por 16. Veja a conversão do decimal 42310 para Hexadecimal. 1(2) Usando N bits, pode-se representar números decimais na faixa de 0 a 2N – 1, em um total de 2N números diferentes. 423 26 + o resto 7 16 26 1 + o resto 10 16 1 0 + o resto 1 16 Sistema de numeração Octal. O sistema de numeração octal é muitas vezes utilizado no trabalho com computadores digitais. O sistema octal tem base oito, o que significa que ele tem oito dígitos possíveis: 0, 1, 2, 3, 4, 5, 6, 7, 8. Assim cada dígito de um número octal pode ter qualquer valor de 0 a 7. 423(10) = 1 Conversão de octal para decimal 0 Código ASCII Antes de maio de 1961 a maioria dos sistemas de computadores tinha uma maneira particular de representar os caracteres alfanuméricos. Assim, foi proposto o uso de um código comum, a fim de possibilitar a comunicação entre os computadores, objetivando permitir a troca de dados entre máquinas de diferentes tipos e fabricantes. O "American National Standards Institute" aceitou a proposta de Robert W. Bemer e sua equipe para desenvolver o "American Standard Code for Information Interchange" (Código Padrão Norte-americano para Intercâmbio de Informações), hoje conhecido como código ASCII. Assim, ASCII é um código numérico usado para representar os caracteres, entendido por quase todos os computadores, impressoras e programas de edição de texto, que usa a escala do decimal 0 a 127. No modo extendido o ASCII forma 256 caracteres. É baseado no alfabeto romano, como é usado no idioma inglês moderno, e visa padronizar a forma pela qual os computadores representam letras, números, acentos e sinais diversos ( por exemplo: <, {, ] ) e alguns códigos de controle ( <Crtl> ) que são utilizados para converter todos os símbolos em números binários, os quais efetivamente podem ser processados. O código permite não só uma melhor compreensão sobre a lógica do funcionamento do computador, mas, também, -1 24,6(8) = 2x(8 ) + 4x(8 ) + 6x(8 ) = 20,75(10) Conversão de decimal para octal. Um número decimal pode ser convertido para octal usando o mesmo método de divisões sucessivas que foi usadona conversão de decimal para binário, porém com um fator de divisão 8 em vez de 2. Veja um exemplo de conversão do número 26610 para a base octal. 266 33 + o resto 2 8 33 4 + o resto 1 8 4 0 + o resto 4 8 266(10) = 4 1 2(8) Sistema de numeração Hexadecimal www.concursosdeti.com.br 7(16) Códigos Alfanuméricos 372(8) = 3x(82) + 7x(81) + 2x(80) = 250(10) 1 A 4 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI possibilita a utilização de caracteres, cujos símbolos não aparecem no teclado. É importante notar que há apenas 95 caracteres que podem ser impressos. E eles são numerados de 32 a 126, pois os primeiros códigos (de 0 a 31) foram reservados para caracteres de controle, ou seja, que controlam funções ou equipamentos. Esses caracteres de controle tiveram sua origem nos primórdios da computação, quando eram utilizadas máquinas Teletype (como máquinas de escrever eletro-mecânicas), fitas de papel perfurado e impressoras de Caracter NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE D1 D2 D3 D4 NAK SYN ETB CAN EM SUB ESC FS GS RS US Espaço ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 www.concursosdeti.com.br Hexadecimal 0 1 2 3 4 5 6 7 8 9 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Prof. Bruno Guilhen cilindro, portanto muitos deles são dirigidos a estes equipamentos. Por exemplo: - o caráter 10 representa a função "LINE FEED", que faz com que uma impressora avance seu papel, - o caráter 24 representa a função "cancel", - o caráter 27 representa a função "escape" determinada pela tecla <ESC>, encontrada no canto superior esquerdo nos teclados. Binário 0000 0000 0000 0001 0000 0010 0000 0011 0000 0100 0000 0101 0000 0110 0000 0111 0000 0100 0000 1001 0000 1010 0000 1011 0000 1100 0000 1101 0000 1110 0000 1111 0001 0000 0001 0001 0001 0010 0001 0011 0001 0100 0001 0101 0001 0110 0001 0111 0001 1000 0001 1001 0001 1010 0001 1011 0001 1100 0001 1101 0001 1110 0001 1111 0010 0000 0010 0001 0010 0010 0010 0011 0010 0100 0010 0101 0010 0110 0010 0111 0010 1000 0010 1001 0010 1010 0010 1011 0010 1100 0010 1101 0010 1110 0010 FFFF 0011 0000 0011 0001 0011 0010 0011 0011 0011 0100 0011 0101 0011 0110 0011 0111 0011 1000 0011 1001 0011 1010 0011 1011 0011 1100 0011 1101 0011 1110 0011 1111 5 Comentário Caracter Nulo Começo de cabeçalho de Tx Começo de texto Fim de texto Fim de transmissão Interroga Confirmação Sinal sonoro Volta um caracter Tabulação Horizontal Próxima linha Tabulação Vertical Próxima Página Início da Linha Shift-out Shift-in Data link escape Controle de dispositivo Controle de dispositivo Controle de dispositivo Controle de dispositivo Negativa de Confirmação Synchronous idle Fim de transmissão de bloco Cancela Fim de meio de transmissão Substitui Escape Separador de Arquivo Separador de Grupo Separador de registro Separador de Unidade www.brunoguilhen.com.br Fundamentos da Computação @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ DELETE 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 LFG-TI 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F Prof. Bruno Guilhen 0100 0000 0100 0001 0100 0010 0100 0011 0100 0100 0100 0101 0100 0110 0100 0111 0100 1000 0100 1001 0100 1010 0100 1011 0100 1100 0100 1101 0100 1110 0100 1111 0101 0000 0101 0001 0101 0010 0101 0011 0101 0100 0101 0101 0101 0110 0101 0111 0101 1000 0101 1001 0101 1010 0101 1011 0101 1100 0101 1101 0101 1110 0101 1111 0110 0000 0110 0001 0110 0010 0110 0011 0110 0100 0110 0101 0110 0110 0110 0111 0110 1000 0110 1001 0110 1010 0110 1011 0110 1100 0110 1101 0110 1110 0110 1111 0111 0000 0111 0001 0111 0010 0111 0011 0111 0100 0111 0101 0111 0110 0111 0111 0111 1000 0111 1001 0111 1010 0111 1011 0111 1100 0111 1101 0111 1110 0111 1111 Tabela ASCII – Extendida. Representa caracteres extras, caracteres de línguas mortas e caracteres especiais para desenhos. caracteres especiais para desenhas figures www.concursosdeti.com.br 6 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI Prof. Bruno Guilhen = Universal Character Set = Conjunto Universal de Caracteres". O Unicode fornece um número único para cada caractere, não importando a plataforma (a máquina e/ou sistema operacional em uso), o programa ou o idioma. Foi desenvolvido para resolver problemas que existiam com outros sistemas de codificação, pois não eram suficientes para suportar todos os caracteres e idiomas. Vários sistemas operacionais, programas e browsers modernos suportam o Unicode. Sua criação foi baseada na tabela ASCII. Existem diversas normas e/ou padrões da ISO, dentre eles o ISO 8859-“X” que define o conjunto completo de alfabetos de todos os idiomas. O ISO 8859-1, por exemplo é o padrão Latin-1 (Alfabeto Latino 1) que nós usamos. Este padrão está sendo largamente implementado e já pode ser visto como um substituto para o padrão ASCII (que é definido pelo ISO 646). Usuários do browser Mozilla Firefox 1.0 (para Windows) podem clicar em “View" ou "Exibir” em seguida em “Character Encoding" ou "Codificação” para verificar a opção “Western (ISO 8859-1)" marcada. Para ver outras opções de codificação, basta clicar em “More Encodings" ou "Mais”. No Internet Explorer 6, esta opção é parecida, onde podemos ver "Europeu Ocidental (Windows) marcada. Dica: Quando acontecer de você acessar um site (usando o Firefox) e os caracteres da página não ficarem completamente legíveis, ou seja, faltando acentuação, caracteres truncados ou estranhos, certifique-se de que o código de caracteres esteja marcado como “Western (ISO 8859-1)” . Isto vale também para os browsers do Linux Mozilla, Galeon, Konkeror, etc. No caso do Internet Explorer, o mesmo emitirá um aviso de instalação sob demanda para o idioma usado no referido site. No exemplo da figura 40, podemos ver o Mapa de Caracteres do Windows XP. Para ter acesso a esse mapa, basta clicar em "Iniciar\Programas\Acessórios\Ferramentas do Sistema\Mapa de Caracteres". Caso não encontre nesse caminho, é possível que não esteja instalado. Neste caso, será necessário ir ao Painel de Controle, clicar em Adicionar ou Remover Programas, inserir o CD do Windows e adicionar o Mapa de Caracteres. Como conseguir um caracter que não está no teclado Pressionando a tecla <ALT> e o número do caracter (D) aparecerá o dígito correspondente em um processador de texto. Faça uma experiência: abra o Word ou o Notepad, pressione <Alt> e o número 65 (no teclado numérico ativado). Levante os 2 dedos juntos. Deve surgir a letra A maiúscula na tela do programa. Outras codificações Há vários conjuntos de caracteres hoje em dia. Por exemplo, há um conjunto de caracteres denominado ISO, similar ao ASCII, que contém caracteres adicionais para as linguagens européias. Também há conjunto de caracteres que se constitui em um padrão mais universal chamado ISO Latin 1, que é usado em muitos sistemas operacionais e em programas para navegação na Internet. Duas das mais importantes codificações atualmente utilizadas são: ISO: "International Standardization Organization". É o padrão ocidental, utilizado também no Brasil. Cada caractere só possui 1 byte ( 8 bits ), gerando um máximo de 256 caracteres. UTF-8: "Unicode Transformation Format-8". É o padrão mundial, que pode ser usado em quase todos os idiomas. Cada caracter possui 2 bytes ( 16 bits ), o que permite um valor máximo bem maior que o anterior: 65.536 caracteres. Nota: Arte ASCII é aquela onde os únicos elementos utilizados são os caracteres disponíveis no teclado do computador. O UNICODE Unicode é o padrão universal de codificação de caracteres. Essa codificação existe em três formas: em 8 bits (UTF-8, baseado no ASCII), 16 bits (UTF-16) e 32 bits (UTF-32). Foi criado pelo Consórcio Unicode e é baseado no padrão ISO 10646 (ISO = International Organization for Standardization = Organização Internacional de Padronização). O Unicode também é conhecido como "UCS www.concursosdeti.com.br 7 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI bit de mais alta ordem, como por exemplo o bit 31 numa palavra de 32 bits. Como o tamanho de uma palavra manipulada por um computador tem tamanho limitado, os números que podem ser representados também têm tamanho limitado. Se o tamanho de uma palavra é igual a n bits, o maior número possível de ser representado é igual a 2n. Se ao realizarmos operações sobre os números, elas gerarem resultados que não podem ser representados na quantidade de bits reservados ocorre o que denominados de overflow (números muito grandes) ou underflow (números muito pequenos). Tanto o overflow quanto o underflow geram exceções e são tratados pelo sistema operacional. Os computadores manipulam tanto números positivos quanto números negativos, que são representados em complemento a 2. Nesta convenção os números que possuem 0s à esquerda são considerados positivos e os números com 1s à esquerda são considerados negativos. O complemento a 2 é obtido invertendo-se o número binário e depois somando 1 a este valor. Porém, uma regra simples para transformar um número binário em sua representação em complemento a 2 é a seguinte: 1) copie da direita para a esquerda todos os bits até encontrar o primeiro bit 1 inclusive e 2) inverta todos os demais bits logo abaixo esta ilustrado um exemplo da obtenção de representação em complemento a 2 de um número binário com 4 dígitos. Figura 40 – Mapa de Caracteres do Windows XP Ainda no exemplo da figura 40, é preciso ressaltar que: 1. Os caracteres mudam de acordo com o tipo de fonte escolhida. Portanto, vai depender do número de fontes que estiver instalado em seu computador; 2. Para que você tenha a mesma visão da tabela acima, é necessário marcar a caixa "Modo de exibição avançado"; IV. 0110 = 6 na base 10 1001 (número binário invertido) + 0001 (soma com 1) 1010 (complemento a 2) usando a regra: 0110 ->1010 Aritmética Computacional As palavras de um computador são compostas por bits e podem representar números armazenados na memória. Estes números podem ter diferentes significados, como inteiros ou reais, serem positivos ou negativos. A manipulação dos números inclui operações de soma, subtração, multiplicação e divisão. O objetivo deste capítulo é mostrar como o hardware implementa a representação dos números, os algoritmos adequados para operações aritméticas e sua implicação no conjunto de instruções da máquina. A respresentação em complento a 2 tem a vantagem de representar números negativos sempre com o bit 1 em sua posição mais significativa. Assim, o hardware só precisa testar este bit para verificar se o número é positivo ou negativo. Este bit é conhecido como bit de sinal. A seguir está representada uma seqüência de números binários (8 dígitos) representados em complemento 2. 0000 0000 = 0 0000 0001 = 1 0000 0010 = 2 0000 0011 = 3 ............. 0111 1101 = 125 0111 1110 = 126 0111 1111 = 127 No conjunto acima nota-se que o número mais a esquerda é zero, logo o número é positivo. ............. 1000 0001 = -127 (o número mais a direita indica o sinal) 1000 0010 = -126 1000 0011 = -125 ............. 1111 1101 = -3 1111 1110 = -2 1111 1111 = -1 No conjunto acima nota-se que o número mais a esquerda é um, logo o número é negativo. Números com Sinal e Números sem Sinal Os números podem ser representados em qualquer base. Porém, a base 2 é a mais adequada para os computadores porque tratam com somente dois valores 0 e 1. Estes valores são implementados facilmente através de circuitos elétricos. Da aritmética temos que, em qualquer base, o valor do iésimo dígito d de um número é dado por: d x basei, onde i começa em 0 e cresce da direita para a esquerda, de acordo com a posição ocupada pelo dígito. Por exemplo, o número 1011 na base dois é igual a: (1x23) + (0x22) + (1x21) + (1x20) = (1x8) + (0x4) + (1x2) + (1x0) = 8 + 0 + 2 + 1 = 11. Portanto, os bits são numerados como 0,1,2,3,... da direita para a esquerda em uma palavra. Utilizamos a expressão bit menos significativo para designar o bit 0, e a expressão bit mais significativo para designar o www.concursosdeti.com.br Prof. Bruno Guilhen 8 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI Prof. Bruno Guilhen Adição e Subtração Numa soma os bits são somados um a um da direita para a esquerda, com os carries sendo passados para o próximo bit à esquerda. A operação de subtração usa a adição. O subtraendo é simplesmente negado antes de ser somado ao minuendo. Lembre-se que a máquina trata com números representados em complemento a 2. A seguir mostr-se as operações de soma (6+7) e subtração (7-6) bit a bit entre dois números representados com 4 dígitos binários. 710 = 0 1 1 12 610 = 0 1 1 02 1310 = 1 1 0 12 110 = 0 0 0 12 Construção de uma Unidade Lógica Aritmética A unidade lógica aritmética (ALU – Arithmetic Logic Unit) é o dispositivo que realiza as operações lógicas e aritméticas, definidas pelo conjunto de instruções, dentro do processador. A ALU é construída basicamente por quatro blocos básicos de hardware: portas AND, portas OR, NOT (inversores) e multiplexadores. As implementações de operações lógicas são as mais simples de serem realizadas, pois elas são mapeadas diretamente com componentes do hardware. A próxima função a ser incluída é a adição. Supondo que temos apenas um bit para ser somado, necessitamos de um circuito com duas entradas para os operandos, uma saída para a soma resultante, uma entrada relativa ao carry in e uma saída para o carry out. A Figura 41 mostra este somador. Como citado anteriormente, tanto a soma como a subtração podem gerar overflow ou underflow, se o resultado obtido não puder ser representado pela quantidade de bits que formam uma palavra. Se somarmos ou subtrairmos dois números com sinais contrários, nunca ocorrerá overflow ou underflow. Isto porque operandos com sinais contrários nunca podem ser maior do que qualquer dos operandos. O overflow ocorre quando somamos dois operandos positivos e obtemos um resultado negativo, ou vice-versa. Isto significa que utilizamos o bit de sinal, gerando um carry, para armazenar um valor pertencente ao resultado da operação. Raciocínio semelhante é realizado para detectar a ocorrência do underflow numa subtração. Neste caso, o bit de sinal também é usado para armazenar um valor pertencente ao resultado da operação. Os projetistas de um sistema devem decidir onde tratar a ocorrência de overflow ou de underflow em operações aritméticas. Elas podem ser tratadas tanto por hardware quanto por software. Pode existir a detecção por hardware que gera uma exceção, e que depois é tratada por software. Figura 41. Somador de um bit Podemos especificar as saídas soma e carry out através de equações lógicas, que podem ser implementadas a partir dos blocos de hardware mencionados anteriormente. A equação lógica para gerar o bit carry out é dada por: Operações Lógicas Os computadores manipulam palavras, mas é muito útil, também, manipular campos de bits dentro de uma palavra ou mesmo bits individuais. O exame de caracteres individuais (8 bits) dentro de uma palavra é um bom exemplo dessa necessidade. Assim, as arquiteturas de conjuntos de intruções incluem instruções para manipulação de bits. Um dos tipos de instrução utilizados são as de deslocamento de bits. As instruções podem deslocar bits tanto à direita quanto à esquerda. Todos os bits são movidos para o lado determinado e os bits que ficam vazios são preenchidos com 0s. Outras instruções lógicas muito úteis são que implementadas na unidade lógica e aritmética de um processador são as operações NOT, AND, OR e XOR. A seguir mostra-se as operações lógicas, bit a bit, de deslocamento à direita, à esquerda, NOT, AND, OR e XOR. www.concursosdeti.com.br CarryOut = (b. CarryIn) + (a.CarryIn) + (a.b). E, a equação lógica para gerar o bit soma é dada por: Soma = (a . b . carryin ) + ( a . b . carryin ) + ( a . b .CarryIn) + (a . b . CarryIn). Para completar o projeto de uma ALU de n bits podemos conectar n somadores de um bit. Os carry outs gerados pelos bits menos significativos da operação podem ser propagados por toda a extensão do somador, gerando um carry out no bit mais significativo do resultado da operação. Este somador é denominado somador de carry propagado. 9 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI Um método elegante de multiplicar números com sinal recebeu o nome de algoritmo de Booth. Ele foi elaborado a partir da constatação de que com a capacidade de somar e de subtrair números existem várias maneiras de se calcular um produto. Por exemplo, podemos substrituir um string de 1s no multiplicador por uma subtração quando encontramos o primeiro 1, e por uma soma ao encontrarmos o último 1 do string. Booth buscou atingir maior velocidade de processamento utilizando operações de deslocamento, que ainda hoje são operações mais rápidas do que operações de soma. Baseado nesta observação, se desejarmos maior velocidade na multiplicação de números inteiros por uma potência de 2, basta que utilizemos operações de deslocamento indicando a quantidade de deslocamentos igual ao expoente. A grande vantagem do algoritmo de Booth é tratar com facilidade os números com sinal. O raciocínio de Booth foi classificar os grupos de bits como início, meio e fim de um string de 1s. Naturalmente um string de 0s não precisa ser considerado. A operação de subtração pode ser realizada somando-se o minuendo com a negação do subtraendo. Este efeito é realizado acrescentando uma entrada complementada de b ao somador e ativando o carry in do bit menos significativo para um. O somador então calcula a + b + 1. Ao escolhermos a versão invertida de b obtemos: a+ b + 1 = a + ( b + 1) = a + (-b) = a - b. A simplicidade do projeto do hardware de um somador para números de complemento a 2 demonstra porque esta representação tornou-se um padrão para operações aritméticas inteiras em computadores. O problema com o somador de carry propagado está relacionado a velocidade de propagação do carry, que é realizada seqüencialmente. Num projeto de hardware a velocidade é um fator crítico. Para solucionar este problema existem diversos esquemas para antecipar o carry. Porém, nestes esquemas são utilizadas mais portas lógicas o que provoca um aumento no custo. Um dos esquema para antecipar o carry é denominado carry lookahead. Os somadores que utilizam o esquema de carry lookahead baseiam sua implementação em vários níveis de abstração. Utilizando a abreviação ci para representar o iésimo bit de carry, podemos escrever a equação do carry como: Algoritmo da multiplicação Este algoritmo precisa apenas de dois passos principais: o teste do produto e o seu deslocamento; pois os registradores Produto e Multiplicador podem combinados em um só. O algoritmo começa com o Multiplicador na metade à direta do registrador Produto, e 0 na metade à esquerda. 1. Testa se Produto é igual a 0 ou 1. 2. Produto = 0, passa ao item 4. 3. Produto = 1, soma o Multiplicando à metade esquerda do Produto e coloca o resultado na metade à esquerda do resgistrador Produto. 4. Desloca o registrador Produto 1 bit à direita. 5. Verifica se foram realizadas todas as repetições necessárias de acordo com o tamanho da palavra, se não volta ao item 1. 6. Fim. ci = (bi . ci) + (ai . ci) + (ai . bi) = (ai . bi) + (ai + bi) . ci Os termos (ai . bi) e (ai + bi) são tradicionamente chamados de gerador (gi) e propagador (pi), respectivamente. Usando estas relações para definir ci + 1, obtemos: ci + 1 = gi + pi . ci Qualquer equação lógica pode ser implementada com uma lógica de dois níveis. Mesmo esta formulação mais simplificada pode gerar equações muito grandes e, portanto levar a circuitos lógicos relativamente grandes e caros, dependendo do número de bits a serem somados. Divisão A divisão é a operação recíproca da multiplicação. Dentre as operações aritméticas é a que aparece menos freqüentemente nos códigos dos programs. No algoritmo da divisão são utilizados dois operandos, o dividendo e o divisor, e produzidos dois resultados o quociente e o resto. A relação entre os componentes da divisão pode ser expressa da seguinte forma: Multiplicação Para realizar a multiplicação são necessários dois operandos, um multiplicando e um multiplicador para gerar um operando produto. O algoritmo da multiplicação diz que os dígitos do multiplicando devem ser multiplicados pelos dígitos do multiplicador um de cada vez, da direita para a esquerda, deslocando os produtos intermedários um dígitos à esquerda em relação ao imediatamente anterior. Uma observação importante é que o número de bits do produto final (n+m) é maior do que o número de bits do multiplicando (n) ou do multiplicador (m). Além disso, a multiplicação também precisa tratar a ocorrência de overflow. Considerando os dígitos binários 0 e 1, temos apenas duas possibilidades de escolha, a cada passo da multiplicação: dividendo = quociente x divisor + resto, onde o resto é sempre menor que o divisor. Às vezes, os programas usam a divisão simplesmente para obter o resto, ignorando o quociente. Além disso, é necessário que seja detectada a divisão por zero, que é matematicamente inválida. Algoritmo da divisão Da mesma forma que foram combinados registradores na multiplicação, também na divisão são combinados dois registradores, o Resto e o Quociente. O algoritmo começa com o Resto na metade à esquerda do registrador Resto, e o Quociente na metade à direita. 1. coloque uma cópia do multiplicando (multiplicando x 1) no lugar apropriado, se o dígito do multiplicador for igual a 1, ou 2. coloque 0 (multiplicando x 0) no lugar apropriado, se o dígito do multiplicador for igual a 0. Assim, é necessário desenvolver um algoritmo em hardware que seja eficiente para realizar a multiplicação. www.concursosdeti.com.br Prof. Bruno Guilhen 1. Desloca o registrador Resto 1 bit à esquerda. 2. Subtrai o registrador Divisor da metade à esquerda do registrador Resto e armazena o resultado na metade esquerda do registrador Resto. 10 www.brunoguilhen.com.br Fundamentos da Computação LFG-TI Prof. Bruno Guilhen 4. Teste se overflow ou underflow. 5. Sim, gera exceção. 6. Não, arredonde a mantissa para o número de bits apropriado. 7. Testa se resultado está normalizado. 8. Sim, Fim. 9. Não, retorna ao passo 3. 3. Testa se Resto é menor do que 0. 4. Resto < 0, restaura valor original com Divisor + metade esquerda do Resto, armazenando na metade esquerda do registrador Resto e deslocando 1 bit à esquerda, inserindo 0 no novo bit menos signifiativo, passa ao item 6. 5. Resto = 0, desloca o registrador Resto 1 bit à esquerda, inserindo 1 no novo bit mais à direita. 6. Verifica se foram realizadas todas as repetições necessárias de acordo com o tamanho da palavra, se não volta ao item 1. 7. Desloca a metade a esquerda do registrador Resto 1 bit à direita, Fim. Algoritmo da multiplicação em ponto flutuante 1. Soma os expoentes com peso dos dois números, subtraindo o valor do peso da soma para obter o novo expoente. 2. Multiplique as mantissas. 3. Normalize o produto se necessário, deslocando à direita e incrementando o expoente. 4. Teste se overflow ou underflow. 5. Sim, gera exceção. 6. Não, arredonde a mantissa para o número de bits apropriado. 7. Testa se resultado está normalizado. 8. Não, retorna ao passo 3. 9. Não, faça o sinal do produto positivo se ambos os sinais dos operandos originais são os mesmos, caso contrário o sinal é negativo, Fim. Ponto Flutuante Assim como os números decimais podem ser representados em notação científica normalizada os números binários também podem. A aritmética computacional que manipula os números binários em notação científica normalizada é denominada de aritmética de ponto flutuante. Os projetistas do hardware devem encontrar um compromisso entre a mantissa e o expoente dos números em ponto flutuante. A relação entre e mantissa e o expoente é expressa do seguinte modo: o aumento do número de bits reservados à mantissa aumenta a precisão do número, enquanto o aumento do número de bits reservados ao expoente aumenta o intervalo de variação dos números representados. Deve ser observado que as interrupções relativas ao overflow e ao underflow também ocorrem na representação em ponto flutuante. Porém, neste caso, overflow e o underflow ocorrem quando o expoente é muito grande ou muito pequeno, respectivamente, para ser armazenado no espaço reservado a ele. Outra questão que os projetistas devem decidir é se vão ser utilizados os mesmos registradores tanto para números inteiros quanto para números de ponto flutuante. A adoção de registradores diferentes aumenta ligeiramente o número de instruções necessárias a execução do programa. O impacto maior está na criação de um conjunto de instruções de transferência de dados para mover os dados entre os registradores de ponto flutuante e a memória. Os benefícios estão no fato de não precisar aumentar o tamanho do campo nas instruções para diferenciar os operandos e aumentar a banda passante dos registradores. A partir de 1980 todos os computadores projetados adotam uma representação padrão para números em ponto flutuante denominada IEEE 754. A adoção deste padrão facilita a portabilidade de programas (precisão simples = 1 bit de sinal, 8 bits de expoente e 23 bits de mantissa + 1 implícito = 24, precisão dupla = 1 bit de sinal, 11 bits de expoente e 52 bits de mantissa + 1 implícito = 53). A adição e a multiplicação com números de ponto flutuante, na sua essência, utilizam as operações inteiras correspondentes para operar as mantissas, mas é necessária uma manipulação extra nos expoentes e para a normalização do resultado. Algoritmo da adição em ponto flutuante 1. Compare o expoente dos dois números. Desloque o menor número à direita até que seu expoente se iguale ao maior número. 2. Some as mantissas. 3. Normalize a soma, deslocando à direita e incrementando o expoente ou deslocando à esquerda e decrementando o expoente. www.concursosdeti.com.br 11 www.brunoguilhen.com.br