Anúncio
Tabela de conversao
Tabela de conversao
Tabela de conversao
Tabela de conversao
Anúncio
Tabela de conversao
Tabela de conversao
Tabela de conversao
Tabela de conversao
Tabela de conversao
Anúncio
Tabela de conversao
Tabela de conversao
Tabela de conversao
Tabela de conversao
Tabela de conversao
Anúncio
Tabela de conversao
Tabela de conversao
Próximos SlideShares
Sistemas de Numeração e Conversão de BasesSistemas de Numeração e Conversão de Bases
Carregando em ... 3
1 de 16
Anúncio

Mais conteúdo relacionado

Anúncio

Último(20)

Anúncio

Tabela de conversao

  1. M IN I ST É RI O D A E DU C AÇ ÃO UN I VE R SI D AD E A B ER T A DO B RA S IL – U A B INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE MATO GROSSO – IF - MT DIRETORIA DE ENSINO CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET MODALIDADE A DISTÂNCIA - TSIAD DISCIPLINA: Algoritmos Professor Autor: Evandro César Freiberger João Paulo Delgado Preti 2009/1
  2. Unidade II – Representação da Informação no Computador APRESENTAÇÃO 3 2. REPRESENTAÇÃO DA INFORMAÇÃO NO COMPUTADOR 3 2.1 REPRESENTAÇÃO DE VALORES NUMÉRICOS 3 2.1.1 BASE HEXADECIMAL 5 2.2 TABELA DE CONVERSÃO 7 2.2.1 AGRUPAMENTOS DE BITS CONHECIDOS 7 2.3 REPRESENTAÇÃO DE CARACTERES 7 2.4 REPRESENTAÇÃO DE VALORES LÓGICOS 8 2.5 REPRESENTAÇÃO DE CORES 8 2.6 REPRESENTAÇÕES NUMÉRICAS COM SINAL 8 2.6.1 VALORES INTEIROS COM SINAL 9 2.6.2 VALORES NÃO INTEIROS 10 2.6.3 INSTRUÇÕES DE MÁQUINA 11 BIBLIOGRAFIA 16 Algoritmos 2
  3. APRESENTAÇÃO Utilizaremos os ícones abaixo para que você facilmente localize aspectos importantes do conteúdo: Utilizado para apresentar uma definição. Utilizado para apresentar uma dúvida pertinente ao contexto. Utilizado para indicar um aviso. Utilizado para indicar um ponto crítico ou problema a ser considerado. Utilizado para indicar uma referência na Internet. 2. Representação da Informação no Computador Como foi apresentado anteriormente, os computadores digitais usam a base binária na representação e processamento de todas as informações manipuladas. Entender a base binária nos ajudará entender como funcionam as principais tarefas de um computador. 2.1 Representação de Valores Numéricos Nessa seção iremos entender como são representadas as informações no computador digital. Iniciaremos com a representação de valores numéricos (valores inteiros sem sinal, valores inteiros com sinal e valores não inteiros), depois vamos conhecer outras representações, tais como: caracteres, cores e instruções de máquina. Para facilitar a compreensão da base binária primeiro faremos uma revisão na base numérica decimal, a base usada no nosso cotidiano para representação de números. É formada por 10 dígitos: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Por ser a base do nosso dia a dia, a maioria de nós nos esquecemos de como os valores são obtidos a partir de um conjunto de dígitos decimais, por exemplo, porque a junção dos dígitos “1” com “0” com “0” formam o valor 100 (cem). Vejamos: 100 = 1²0¹0º = 1 x 10² + 0 x 10¹ + 0 x 10º Assim temos: 100 + 0 + 0 = 100 Obs: os índices iniciam em zero na extremidade direita e crescem para a extremidade esquerda; o valor dez é decorrente da base decimal. 123 = 1²2¹3º = 1 x 10² + 2 x 10¹ + 3 x 10º Assim temos: 100 + 20 + 3 = 123 1235 = 1³2²3¹5º = 1 x 10³ + 2 x 10² + 3 x 10¹ + 5 x 10º Assim temos: 1000 + 200 + 30 + 5 = 1235 Agora vamos entender como funciona a base binária que é formada por apenas dois dígitos: 0 e 1, com esses dois dígitos são representadas todas as informações que são manipuladas pelo computador. Para facilitar nós iremos analisar a representação de Algoritmos 3
  4. números inteiros positivos primeiramente. Analogamente à base decimal, os valores são obtidos de uma cadeia de zeros e uns binários. Veja exemplos: A cadeia “10” (lê-se: um zero e não dez, lembre-se!), qual será o valor numérico (base decimal) representado pela seqüência binária? 10 = 1¹0º = 1 x 2¹ + 0 x 2º = 1 x 2 + 0 x 1 = 2 na base decimal A cadeia “11” (lê-se um um e não onze). 11 = 1¹1º = 1 x 2¹ +1 x 2º = 1 x 2 + 1 x 1 = 3 na base decimal A cadeia “1000” (lê-se um zero zero zero e não mil). 1000 = 1³0²0¹0º = 1 x 2³ + 0 x 2² + 0 x 2¹ + 0 x 2º =1x8+0x4+0x2+0x1 = 8 na base decimal A cadeia “1000” (lê-se um zero zero um e não mil e um). 1001 = 1³ 0² 2¹ 1º = 1 X 2³ + 0 X 2² + 0 X 2¹ + 1 X 2º = 1 x 8 + 0 x 4 + 0 x 2 + 1 x 1 = 9 na base decimal Nos exemplos acima estávamos preocupados em obter um valor decimal (base cotidiana) a partir de uma seqüência de dígitos binários. Agora vamos obter dígitos binários a partir de um valor decimal. Para isso vamos usar a operação de divisão, dividiremos o valor decimal por dois (base binária) varias vezes até obtermos a seqüência completa. Uma observação importante é que usaremos a divisão inteira e não a divisão fracionada. Por exemplo: 5 / 2 = 2,5 na divisão fracionada 5 / 2 = 2 com resto 1 na divisão inteira Resultado = 101 (lê-se um zero um) Vamos entender o que foi feito. A primeira divisão, dividiu o valor 5 por 2 (divisão inteira), o resultado foi 2 e resto 1. A segunda divisão tomou o resultado da primeira, no caso 2 e dividiu por 2, o resultado foi 1 e resto 0. A terceira divisão, tomou o resultado da segunda, no caso 1 e dividiu por 2, o resultado foi 0, visto que não é possível realizar essa divisão inteira, então o resultado é 0 e resto 1. Por ultimo pega-se os restos das divisões no sentido do ultimo resto para o primeiro e essa é a seqüência binária que representa o valor 5 decimal. Vamos a outro exemplo. Assim a seqüência binária que representa o valor inteiro 13 é 1101. Vamos verificar se o resultado está correto? Para isso temos que fazer a operação inversa, ou seja, transformar a seqüência binária em Algoritmos 4
  5. um número decimal, se obtivermos o valor 13 a nossa seqüência está correta. 1101 = 1³1²0¹1º = 1 x 2³ + 1 x 2² + 0 x 2¹ + 1 x 2º = 1 x 8 + 1 x 4 + 0 x 2 + 1 x 1 = 8 + 4 + 0 + 1 = 13 2.1.1 Base Hexadecimal Outra base numérica muito usada na computação é a base hexadecimal. Essa base foi desenvolvida para que grandes cadeias de binários pudessem ser visualizadas de forma mais amigável. O computador manipula muito bem o binário, contudo o ser humano tem muita dificuldade, principalmente quando as cadeias de binários tornam extensas. Outra característica dos valores na base hexadecimal é que são facilmente convertidos para binários ou vice-versa, não necessitando fazer conversões para a base decimal. Vamos conhecer as características dessa base numérica. Possui 16 símbolos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F, onde: A = 10 B = 11 C = 12 D = 13 E = 14 F = 15, todos em valores decimal Dígitos Normais + 6 letras do alfabeto. As regras de conversão para a base decimal são as mesmas da base binária, o que muda é a base, veja exemplo abaixo: O valor 453 na base hexadecimal representa que valor decimal? 453 = 4²5¹3º = 4 x 16² + 5 x 16¹ + 3 x 16º = 4 x 256 + 5 x 16 + 3 x 1 = 1024 + 80 + 3 = 1107 na base decimal Agora vamos obter a representação hexadecimal de um valor expresso em base decimal, ou seja, vamos converter um valor decimal para um valor hexadecimal. 170 / 16 = 10 resta 10 10 / 16 = 0 resta 10 Assim os restos são 10 e 10, como o valor 10 é representado pela letra A o símbolo hexadecimal que representa o valor decimal 170 é AA. Outro exemplo: 180 / 16 = 11 e resto 4 11 / 16 = 0 e resto 11 Os restos obtidos na ordem inversa de calculo foram 11 e 4, como o valor 11 é representado pela letra B, o resultado da conversão é B4. Algoritmos 5
  6. Anteriormente apresentamos a base hexadecimal como uma base opcional em visualizações e grandes cadeias de binários, assim muitas interfaces de dispositivos eletrônicos, ao invés de serem configurados e/ou manipulados diretamente em binários, são manipulados em hexadecimal. Contudo os dispositivos continuam entendendo binários, o que vai existir é um conversor de hexadecimal para binário e um conversor de binário para hexadecimal. Vamos analisar o exemplo a seguir. Se tivermos uma cadeia hexadecimal e desejarmos convertê-la para binários, a maneira mais natural de fazermos isso é converter o hexadecimal para decimal e depois o decimal para binário. Veja exemplo: O valor AA em hexadecimal equivale 170 em decimal e a 10101010 em binário. Contudo foi desenvolvida uma técnica de conversão de hexadecimal para binário de forma direta, sem passar pelo decimal. Isso facilita a construção de dispositivos que embora funcionem em binários, possam ser manipulados através de hexadecimais. Acompanhe o seguinte raciocínio: 1 símbolo hexadecimal representa 16 valores decimais 4 símbolos binários representam 16 valores decimal 24 1 símbolo hexadecimal substitui 4 dígitos binários Assim, agrupamos os binários em grupos de quatro da direita para a esquerda, depois calculamos o valor de cada grupo separadamente e substituímos esse valor pelo símbolo hexadecimal correspondente. Outro exemplo: Foram inseridos dois zeros à esquerda do último grupo de binários para formar um grupo de quatro, embora isso não afete o valor. 3EB = 3 x 162 + E x 161 + B x 160 => 768 + 224 + 11 = 1003 1111101011= 1 x 29 + 1 x 28 + 1 x 27 + 1 x 26 + 1 x 25 + 0 x 24 + 1 x 23 + 0 x 2 + 2 1 x 21 + 1 x 20 = 512 + 256 + 128 + 64 + 32 + 0 + 8 + 0 + 2 + 1 = 1003 A conversão de hexadecimal para binário é bastante simples, cada símbolo hexadecimal produz um grupo de quatro binários que representam um valor entre 0 e 15. O valor B4 em hexadecimal equivale a 10110100 em binário, veja: Algoritmos 6
  7. 1x27+0x26+1x25+1x24+0x23+1x22+0x21+0x20 => 128 + 0 + 32 + 16 + 0 + 4 + 0 + 0 = 180 Com da tabela de conversão abaixo é possível converter qualquer valor hexadecimal para binários ou vice-versa, sem fazer cálculos e também com baixa probabilidade de erros. 2.2 Tabela de conversão Decimal Hexadecimal Binário 00 0 0000 01 1 0001 02 2 0010 03 3 0011 04 4 0100 05 5 0101 06 6 0110 07 7 0111 08 8 1000 09 9 1001 10 A 1010 11 B 1011 12 C 1100 13 D 1101 14 E 1110 15 F 1111 2.2.1 Agrupamentos de bits conhecidos Um dígito binário é chamado de bits – representa dois valores 2¹ 4 bits => nibble – representa 16 valores 24 8 bits => byte – representa 256 valores 28 1024 bytes => Um Kilobyte => 1KB = 210 = 1024 bytes 1024 Kilobytes => Um Megabyte => 1MB = 220 = 1.048.576 bytes 1024 Megabytes => Um Gigabyte => 1GB = 230 = 1.073.741.824 bytes 1024 Gigabytes => Um Terabyte => 1TB = 240 = 1.099.511.627.776 bytes Até agora usamos os bits para representarem números inteiros sem sinal, contudo os computadores usam os bits para representar todas as informações que ele manipula. O que se pode representar com N bits? 2N coisas. Quais coisas? Números! Caracteres! Pixeis! Valores Monetários! Posições! Instruções! ... Bits podem representar qualquer coisa! 2.3 Representação de Caracteres Um dos padrões mais conhecidos de representação de caracteres é o ASCII – American Standard Code for Information Interchange. Esse padrão usa um byte para representar cada caractere e tem a possibilidade de representar 256 caracteres, visto que um byte permite 256 combinação de valores ( 0 a 255). Exemplos de codificações da tabela ASCII: Algoritmos 7
  8. Caractere Dec. Hex. Binário Espaço 32 20 0010 0000 ! 33 21 0010 0001 " 34 22 0010 0010 # 35 23 0010 0011 ... ... ... ... 0 48 30 0011 0000 1 49 31 0011 0001 2 50 32 0011 0010 3 51 33 0011 0011 ... ... ... ... A 65 41 0100 0001 B 66 42 0100 0010 C 67 43 0100 0011 ... ... ... ... a 97 61 0110 0001 b 98 62 0110 0010 c 99 63 0110 0011 ... ... ... ... Outra codificação para caracteres é o padrão Unicode, que usa dois bytes para representar cada caractere, isso possibilita 65536 símbolos. 2.4 Representação de Valores Lógicos Os valores lógicos serão muito usados nessa disciplina de algoritmo, eles representam dois valores: verdadeiro e falso. Esses valores poderiam ser representados apenas por um bit, contudo os computadores possuem uma quantidade mínima de combinação de bits, chamada de “palavra”. A palavra de um computador é a quantidade padrão de bits que são envolvidas nas operações de processamento. Os computadores usam no mínimo uma palavra ou uma combinação de várias palavras para representarem as informações envolvidas em suas operações. Assim os valores lógicos, apesar de poderem ser representados apenas com um bit, normalmente são representados com um byte, que é o tamanho padrão de palavra para a maioria dos computadores. 2.5 Representação de Cores Assim como os caracteres, as cores podem ser representadas por vários padrões. Um dos mais conhecidos é o padrão RGB (Red, Green, Blue), que usa três bytes para representar as cores primárias (Vermelho, Verde e Azul). Cada byte pode variar entre 0 a 255, assim a combinação desses três bytes produzem uma mistura de cores primárias e resultam em cores derivadas. Normalmente os valores RGB’s são visualizados em interfaces de software através de valores em hexadecimais. Por exemplo: A45B3E, assim a intensidade da cor vermelho é A4, da cor verde é 5B e da cor azul é 3E. Outro exemplo: se definirmos 00 para as três cores, então teremos o preto, por outro lado, se definirmos FF (255) para as três cores teremos o branco. 2.6 Representações numéricas com sinal Algoritmos 8
  9. A representação numérica binária conhecida até agora não atende todas as necessidades de representação de números. Além dos números naturais, precisamos representar valores inteiros com sinal e valores não inteiros. Existem vários métodos de representação numérica, vamos ver alguns deles para que possamos entender de forma geral, como os números são representados. 2.6.1 Valores Inteiros com Sinal Um dos métodos mais usados para representação de números inteiros com sinal é o complemento de dois. Nesse método o bit mais significativo sinaliza o sinal, se for zero o número é positivo, se for um o número é negativo. É importante termos em mente que em função da representação de valores positivos e negativos, a faixa de valores de uma palavra muda. Veja o exemplo de uma palavra de oito bits, naturalmente ela representaria 256 valores possíveis, se usarmos o valor numérico seria possível representar os valores de 0 a 255. Quando precisamos representar valores negativos, esse mesmo byte representará valores entre -128 a 0 e de 0 a 127. Assim, para uma quantidade de N bits, teremos a possibilidade de expressar valores entre: -2(n-1) e 2(n-1) -1. Vamos aos passos do método: Inverta cada bit da cadeia de bits desejada, isso significa que onde tem zero fica um e onde tem um fica zero; Some um ao resultado obtido no passo anterior; Veja exemplo: O valor 10 expresso em um padrão binário de 8 bits: 00001010 Valor positivo 00001010 Inversão 11110101 Soma Um 00000001 Resultado 11110110 Assim, o valor -10 decimal expresso em binário usando o método de complemento de dois é: 11110110. Outra maneira de usar o método complemento de dois é executar o seguinte procedimento: Tome o padrão binário do número positivo; A partir do bit menos significativo para o mais significativo (da direita para a esquerda) copie os bits até encontrar o primeiro bit 1, inclusive ele. Depois para os demais inverta todos os bits que restarem a esquerda. Valor original 00001010 Cópia / Inversão 11110110 Resultado 11110110 Vamos encontrar o valor negativo do número 79: Algoritmos 9
  10. Valorpositivo 01001111 Cópia / Inversão 10110001 Resultado 10110001 Agora, vamos fazer o inverso, dado um valor negativo, vamos obter o valor positivo. Funciona da mesma maneira, copiamos os bits da direita para a esquerda até encontrar o bit um, inclusive ele, os demais serão invertidos. Valor negativo 10110001 Cópia / Inversão 01001111 Resultado 01001111 2.6.2 Valores Não Inteiros Uma das notações mais utilizada para representação de números não inteiros é a de Ponto Flutuante, que divide cadeia de bits em três termos: Sinal Expoente Mantissa O sinal é representado por um bit, se zero o número é positivo, se um o número é negativo. O expoente estabelece a posição do ponto decimal binário e a mantissa representa o valor a ser representado. Vamos analisar um exemplo, para facilitar usaremos um byte apenas para representar números não inteiros, na prática os computadores usam grande cadeia de bits. Tomemos a seguinte cadeia de bits: 00101010 Sinal Expoente Mantissa 0 010 1010 Nesse exemplo estamos adotando três bits para o expoente e quatro para a mantissa, contudo isso é definido em cada arquitetura de computador. Outro detalhe importante é que o expoente deve ser um valor inteiro com sinal, então também deve ser definido o método de representação de inteiros com sinal, nós usaremos o método complemento de dois, visto que já conhecemos. Vamos analisar os dados do exemplo: Sinal 0 significa que o número que está representado é positivo. O expoente 010 resulta em um valor 2 positivo, isso significa que devemos deslocar o ponto decimal duas casas a direita da mantissa, se fosse negativo o deslocamento do ponto seria a esquerda. Vamos agora aplicar essas informações na mantissa. Obtenha a mantissa: 1010 Coloque o ponto decimal binário a esquerda da mantissa .1010 Desloque o ponto decimal segundo o expoente analisado, no nosso caso deslocaremos o ponto duas casas a direita, então vamos obter: 10.10 Agora vamos obter o valor decimal, para isso temos que considerar o seguinte aspecto: Algoritmos 10
  11. 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 27 26 25 24 23 22 21 20 2-1 2-2 2-3 2-4 2-5 2-6 2-7 128 64 32 16 8 4 2 1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 Assim se tivermos o padrão: 10.10, vamos obter o valor decimal da seguinte maneira: 128 64 32 16 8 4 2 1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1 0 1 0 2+0+½+¼ 2+¾ 2,75 Na verdade continuamos a fazer a conversão de binário para decimal da mesma maneira que fizemos até agora, porém estamos considerando a parte menor que zero nos expoentes, veja resolução abaixo: 1 x 21 + 0 x 20 + 1 x 2-1 + 0 x 2-2 = 2 + 0 + ½ + ¼ = 2,75 Se o padrão de bits fosse 10101010, faríamos o mesmo cálculo, porém no final acrescentaríamos o sinal negativo ao resultado que seria: -2,75. 2.6.3 Instruções de Máquina Até agora nós vimos como as informações são representadas em um computador, mas será como elas são processadas? Como nós falamos para o computador o que ele deve fazer? Será que é necessário dizer ao computador o que fazer? Não pretendo responder essas questões, mas sim conduzir você a um raciocínio que o leve a respondê-las. Vejamos, no início dessa unidade iniciamos o texto dizendo que o grande diferencial dos computadores é a sua capacidade de serem programados e de sua extrema flexibilidade em resolver as mais diferentes tarefas. Vocês estão lembrados da idéia de Jacquard (tear configurado com cartões perfurados) e posteriormente o projeto de Babbage (o projeto da calculadora genérica)? Então o grande desafio e inspiração desses projetos foi o de produzir máquinas genéricas, que não precisavam ser reconstruídas para cada nova aplicabilidade desejada. Dessa mesma maneira os computadores eletrônicos foram projetados. O modelo de arquitetura formalizado por Von Newman tinha como princípio uma unidade de processamento, uma unidade de controle, uma unidade de armazenamento e dispositivos de entrada e saída, basicamente a mesma concepção de Babbage. Veja ilustração a seguir: Algoritmos 11
  12. Figura 1.Representação de uma máquina computacional A Unidade Central de Processamento (CPU) é responsável pelo processamento e controle das atividades que ocorrem no computador. É divida em duas subunidades: a Unidade de Controle (UC) e a Unidade Lógica e Aritmética (ULA). A UC é responsável pelo controle das tarefas que ocorrem na CPU e a ULA é onde ocorrem os cálculos e comparações de dados em processamento. Para que um programa possa ser executado no computador, este deve ser carregado para uma região de armazenamento onde a UC possa buscar as instruções que devem ser executadas, essa região de armazenamento é denominada de Memória Figura 2.Representação da Unidade Central de Processamento Principal (MP), que usa a tecnologia RAM (Memória de Acesso Aleatório). Além das instruções de um programa, os dados que são manipulados por esse programa, também ficam armazenados na MP. A ilustração a seguir, apesar de ser extremamente simplista, visto que na realidade as CPU’s atuais possuem inúmeros elementos que foram desconsiderados nessa figura, detalha um pouco melhor os elementos que compõem uma CPU. A ilustração anterior mostra que existem elementos tais como: CI (contador de instruções), RI (registrador de instruções) e R0 ... RN (registradores de uso geral). Os registradores de uma CPU são acumuladores de valores (alguns gerais outros específicos) que são usados durante a execução de um programa. Cada processador é projetado e fabricado para reconhecer um conjunto de instruções (comandos). A esse conjunto de instruções é dado o nome de Linguagem de Máquina, já que é particular para cada modelo de processador. Uma instrução de máquina é formada por um código, que a identifica, e os operandos da instrução. Osoperandos são informações adicionais que cada instrução necessita para sua execução. Veja a seguir a estrutura genérica de uma instrução de máquina. Algoritmos 12
  13. Código Operando 1 Operando 2 Operando 3 Como todas as informações que um computador reconhece são representadas com símbolos binários, as instruções de máquina também são. Os códigos das instruções são valores inteiros sem sinal, os operandos podem ser caracteres, valores inteiros, valores não inteiros, etc. Veja a seguir um exemplo de uma instrução de máquina. Código Operando1 Operando2 Operando3 Decimal 1 1 2 3 Binário 00000001 00000001 00000010 00000011 Para entendermos o significado de uma instrução de máquina, precisamos saber previamente alguns conceitos. O primeiro é o de programa armazenado, que diz respeito às instruções de máquina que são armazenados em um arquivo, que recebe o nome de código executável. Quando queremos executar um programa em um computador alguns passos devem acontecer. Não vamos nesse momento levar em consideração todos os aspectos da execução de um programa, e sim um conjunto mínimo que nos fará entender o significado de instruções de máquina. Vamos abstrair, por exemplo, as etapas realizadas pelo Sistema Operacional, que são importantes, mas nesse momento aumentaria a complexidade do nosso entendimento. Vamos aos passos de execução de um programa: 1. Carregar o programa para a memória principal; 2. Iniciar o registrador CI com o endereço de memória da primeira instrução do programa; 3. Repetir os passos seguintes até encontrar o fim do programa ou ocorrer um erro: a. Carregar a instrução de máquina (copiar) apontada pelo CI para o RI; b. Incrementar o CI para apontar para o próximo endereço da memória (próxima instrução); c. Decodificar (interpretar) a instrução que está no RI; d. Delegar a execução da instrução para a parte correspondente da ULA; Os sub-passos do passo 3, são denominados de ciclo de máquina, pois são repetidos para cada instrução. O ciclo de máquina é formado por três etapas: busca, decodificação e execução. Vamos conhecê-los em maiores detalhes: A busca de instrução é compreendida dos seguintes passos: A unidade de controle, através do registrador CI, requer da MP, a próxima instrução; Algoritmos 13
  14. Quando a MP disponibiliza a instrução, essa é armazenada no registrador RI; Por último é incrementado o CI, para indicar a próxima instrução; A decodificação de instrução é dividida em dois passos: A UC identifica a instrução pelo campo código; A UC invoca os circuitos da ULA, passando os operandos; A execução da instrução é executada pela ULA através dos passos: Execução da instrução com os operandos (valores) recebidos da UC; Vamos agora adotar um conjunto de instruções de máquina (hipotético) como sendo uma linguagem de máquina, veja tabela a seguir: CódigoDec. CódigoBin. Operandos Interpretação 1 00000001 R1 R2 R3 R1= R2 + R3 2 00000010 R1 R2 Valor R1= R2 + Valor 3 00000011 R1 R2 R3 R1= R2–R3 4 00000100 R1 Endereço 0 R1= [Endereço] 5 00000101 R1 Endereço 0 [Endereço] =R1 6 00000110 R1 R2 NI Se R1= R2 CI =CI + 4 * NI 7 00000111 R1 R2 NI Se R1<>R2 CI = CI+4 * NI 8 00001000 Endereço 0 0 CI = Endereço 9 00001001 R1 R2 R3 R1= R2 * R3 10 00001010 R1 R2 R3 R1=R2 div R3(divisão inteira) 11 00001011 0 0 0 sair Exemplo de programa escrito com a linguagem de máquina acima, com valores representados em base decimal: Endereço Conteúdo da Memória 0000:0000 4 0 20 0 0000:0004 4 1 24 0 0000:0008 1 4 0 1 0000:0012 5 4 28 0 0000:0016 11 0 0 0 0000:0020 5 0000:0024 7 0000:0028 0000:0032 Exemplo de programa escrito com a linguagem de máquina acima, com valores representados em base hexadecimal (endereços) e base binária (instruções): Endereço Conteúdo da Memória 0000:0000 00000100 00000000 00010100 00000000 0000:0004 00000100 00000001 00011000 00000000 0000:0008 00000001 00000100 00000000 00000001 0000:000C 00000101 00000100 00011100 00000000 0000:0010 00001011 00000000 00000000 00000000 0000:0014 00000101 0000:0018 00000111 0000:001C 0000:0020 Vamos brincar de CPU. Para facilitar vamos usar para as representações de informação (dados e endereços) a base decimal, mas sendo consciente que internamente a representação é binária. Algoritmos 14
  15. Situação 01 – carga do programa para a memória principal Registradores Valores CI 0000:0000 RI · Inicia o valor de CI com o endereço da R0 primeira instrução do programa a ser R1 executado R2 R3 R4 Situação 02 – execução do primeiro ciclo de máquina Registradores Valores CI 0000:0004 · Carrega-se a instrução apontada pelo CI para o RI RI 4-0-20-0 · Incrementa CI para o novo endereço R0 5 · Decodifica a instrução: carregar o valor do endereço R1 de memória 20 para o registrador R0 (neste caso o R2 valor 5) R3 R4 Situação 03 – execução do segundo ciclo de máquina Registradores Valores CI 0000:0008 RI 4-1-24-0 · Carrega-se a instrução apontada pelo CI para o RI · Incrementa CI para o novo endereço R0 5 · Decodifica a instrução: carregar o valor do endereço de R1 7 memória 24 para o registrador R1 (neste caso o valor 7) R2 R3 R4 Situação 04 – execução do terceiro ciclo de máquina Registradores Valores CI 0000:0012 · Carrega-se a instrução apontada pelo CI para o RI RI 1-4-0-1 · Incrementa CI para o novo endereço R0 5 · Decodifica a instrução: somar o conteúdo do registrador R1 7 R0 com o conteúdo do registrador R1 e armazenar o R2 resultado no registrador R4 R3 R4 12 Situação 05 – execução do quarto ciclo de máquina Registradores Valores CI 0000:0016 · Carrega-se a instrução apontada pelo CI para o RI RI 5-4-28-0 · Incrementa CI para o novo endereço R0 5 · Decodifica a instrução: descarregar o conteúdo do R1 7 registrador R4 no endereço de memória 28 R2 R3 R4 12 Endereço Conteúdo da Memória 0000:0000 4 0 20 0 0000:0004 4 1 24 0 0000:0008 1 4 0 1 0000:0012 5 4 28 0 0000:0016 11 0 0 0 0000:0020 5 0000:0024 7 0000:0028 12 0000:0032 Algoritmos 15
  16. Situação 06 – execução do quinto ciclo de máquina Registradores Valores CI 0000:0024 RI 11-0-0-0 · Carrega-se a instrução apontada pelo CI para o RI R0 5 · Incrementa CI para o novo endereço R1 7 · Decodifica a instrução: encerrar o programa R2 R3 R4 12 [ Bibliografia ] BROOKSHEAR, J. Glenn. Ciência da Computação – Uma visão abrangente. 5. ed. Porto Alegre: Bookman, 2000. BARRETO, Jorge Muniz. Notas de aulas do mestrado em Ciência da Computação, 2000. CORTELAZZO, Iolanda B. C, link disponível na web: http://www.boaaula.com.br/iolanda/hic/hicsum.html, consultado em 20/12/2007. MANZANO, Jose Augusto Navarro Garcia.; OLIVEIRA, Jayr Figueiredo de. Algoritmos: Lógica para o desenvolvimento de programação de computadores. Érica, 18ª ed. Algoritmos 16
Anúncio