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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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