Conceitos Básicos

Propaganda
Curso de Ciências da Computação
1. NÍVEL CONVENCIONAL DE MÁQUINA (Cont.)
1.3. INSTRUÇÕES – Conceitos Básicos
Já estudamos anteriormente que os processadores funcionam (ou melhor, o seu hardware
funciona) através de ordens simples e básicas, tais como:




Efetue a soma de dois números;
Mova um dado de um local para outro;
Adicione 1 ao valor de um número;
Transfira 1 byte de dados da memória para uma porta de saída.
Estas ordens são simples porque o hardware não é capaz de manipular diretamente ordens
mais complexas.
Ainda sabemos que essas ordens são transmitidas ao hardware (componentes do
processador) para serem interpretadas e executadas por meio de sinais elétricos que
representam ou o bit “1” ou o bit “0”, ou seja, por um conjunto de bits, que chamamos
formalmente de instrução de máquina. Todo processador já é fabricado de modo a conter em
seu interior um grupo dessas instruções, que são chamadas em bloco de: “conjunto de
instruções” (“instruction set”). A escolha das operações que o processador poderá realizar
diretamente (ou seja, quais “instruções” irão realizar) e como cada uma delas será realizada,
passo a passo, são dois itens importantes no projeto e na fabricação de um processador.
Nesse ponto, nos referimos à fronteira entre:
O entendimento do programador – que deseja obter solução para seu problema e elabora
um programa em uma linguagem que seja próxima de seu entendimento (de sua lógica) contendo
operações complexas, em linguagens como: “Pascal”; “C” ou “Java”, e:
O hardware do processador – que aceita apenas operações simples para ser executadas.
O programador (em linguagem de baixo nível) pode ver e manipular alguns poucos
elementos do hardware, como os registradores de dados, a parte de cima da tal fronteira,
enquanto outro nível, chamado de microarquitetura (contendo micro-operações e
microprogramação), se encarrega de interpretar essas instruções e efetivamente providenciar sua
execução, passo a passo (micro-operação por micro-operação). Obs. Existem alguns processadores, no
entanto, (p.ex., os de arquitetura RISC) que usam o controle por meio de programação direta no hardware, sem o uso de
microprogramação.
Fig. 1.3
Instruções passadas aos níveis inferiores ao nível de Máquina convencional.
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 1 de 7
Curso de Ciências da Computação
Vamos acrescentar um exemplo que deve auxiliar o entendimento sobre o conceito e o
papel das instruções de máquina e como, por isso, funcionam os processadores de emprego
geral, assim comercialmente denominados.
Exemplo 1:
Considere uma máquina, um robô, construído de forma a possuir dois braços mecânicos,
com terminações capazes de se mover para cima e para baixo (o braço da esquerda e o braço da
direita) e cada uma das terminações sendo capaz de girar no sentido horário ou contrariamente ao
sentido horário. Os outros movimentos deste Robô são irrelevantes para o exemplo, por isso só
mencionaremos oito movimentos.
Para que ele possa realizar cada um desses movimentos e tenha flexibilidade de realizar
outros mais complexos, projetou-se um conjunto de instruções primitivas (simples) que acionam o
hardware (efetivam os movimentos das articulações, braços): cada uma dessas instruções foi
identificada por um código numérico de 0 a 7, conforme mostrado na Tabela 1.1.
Tabela 1.1 Codificação e descrição de movimentos executados pelo robô no Exemplo 1.
Essa máquina pode ser usada por uma empresa, por exemplo, para aparafusar algum
objeto em uma parede ou desparafusar; a operação (de aparafusar) pode ser realizada em
qualquer posição (como, p.ex., inclinada para baixo, cerca de 45° ou na perpendicular do chão,
(90°), usando qualquer um dos dois braços articulados, e assim por diante).
Se, em determinado momento, se quiser aparafusar um objeto na perpendicular do chão
(90°), pode-se, a partir da posição de repouso do robô (braços estendidos para baixo), comandar
a execução de um programa do tipo:
Contador A = 1
Contador B = 100
Enquanto contador A < 90
Iniciar
Instrução cod. 0
Contador A = contador + 1
Fim
Enquanto contador B < 100
Iniciar
Instrução cod. 2
Contador B = Contador B + 1
Fim
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 2 de 7
Curso de Ciências da Computação
A essência do conceito aqui mostrado é apenas a capacidade de a máquina poder realizar
operações complexas diferentes (e, pois, uma máquina de emprego geral) usando as mesmas
instruções primitivas (da Tabela 1.1), as quais podem ser manipuladas de forma diferente para
obterem-se resultados diferentes.
O programa mostrado é bastante incompleto, porém sua única finalidade é mostrar a
diferença entre uma instrução primitiva, que realiza uma operação básica simples, e uma outra
operação, mais complexa, que requer várias instruções básicas (um programa) para ser realizada.
Além disso, teremos grande flexibilidade de ações complexas a realizar, pois podemos variar a
combinação das primitivas, obtendo-se, com isso, resultados diferentes.
Essa é uma das características essenciais dos computadores de emprego geral. Ou
seja, possuem um conjunto básico de instruções primitivas e o usuário (programador) pode
combina-las de diferentes modos (criar diferentes programas), obtendo diferentes
resultados.
Assim é que um determinado computador (pode ser um dos sistemas baseados em um
processador Pentium 4 ou AMD Athlon XP), com seu conjunto de instruções de máquina
(primitivas) pode ser empregada para o desenvolvimento de textos (com o MS Office ou Open
Office), mas também pode ser empregado para controlar o fluxo de carros em uma região
(controlando a abertura e o fechamento dos sinais de trânsito) e, em determinadas circunstâncias,
poderá, também, ser empregado como plataforma para um sistema de controle bancário e outras
aplicações. O que se quer demonstrar e que a inteligência e a versatilidade do sistema estão
na combinação dessas instruções primitivas (nos programas), no software, visto que o
hardware e imutável (pelo menos para o usuário).
1.4. FORMATO DE UMA INSTRUÇÃO DE MÁQUINA
Como já estudamos, o conjunto de instruções de um processador define o que ele
é capaz de realizar em si, permitindo ao programador do programa compilador escrever seu
código de acordo.
Lembramos que esta é a razão de, por exemplo, um programa escrito em um programa
compilador para “PC” ® não “rodar” em uma plataforma “Apple” ®. As instruções dos
processadores são diferentes, por isso o programa deve ser ajustado à plataforma do
processador.
Uma instrução de máquina deve, então, especificar para o hardware
(especificamente a unidade de controle do processador) que determinada operação deve ser
realizada (soma de dois números, movimento de um dado, etc.). Em função da interpretação do
que é a instrução, a UC, que já possui a sequência de execução (programação) de todas as
instruções daquele especifico processador, "dispara" (emite os sinais elétricos de controle
correspondentes a cada microação) a sinalização para efetivação das ações subsequentes
para a completa execução da operação.
A Fig. 1.4 mostra exemplos de diversas operações primitivas que podem redundar em
instrução de máquina de um determinado processador.
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 3 de 7
Curso de Ciências da Computação
Fig. 1.4 Exemplo de operações primitivas típicas.
Quais são os elementos requeridos para execução de uma operação? Como eles
são projetados para formatar, em binário, uma instrução de máquina? Qual ou quais tipos
de dados ela manipulara? Por exemplo, uma operação de somar dois números requer a
indicação da operação em si (como ela ocorrera) e a localização dos dados envolvidos: a 1ª
parcela, a 2ª parcela e o resultado; é também necessário indicar se os valores são números
inteiros ou números fracionários (ponto flutuante – conforme visto em Circuitos Digitais).
A resposta a essas e outras questões pertinentes configura o projeto do conjunto de
instruções de um determinado processador ou "família" de processadores.
O projetista do conjunto de instruções define, então, que operações aquele
processador irá realizar e especifica, para cada uma delas, todos os detalhes de
identificação e execução da operação, estabelecendo, assim, o formato de cada instrução
da máquina. Além disso, é necessário detalhar sua execução, ou seja, criar uma sequência
de micro-operações para efetivamente realizar a tarefa.
Fig. 1.5
Formato básico de uma instrução de máquina.
Fig. 1.6 Três formatos típicos de instrução: (a) instrução sem endereço;
(b) instrução de um endereço;
(c) instrução de dois endereços.
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 4 de 7
Curso de Ciências da Computação
A Fig. 1.6 mostra vários formatos típicos para as instruções de nível 2. Em algumas
máquinas de nível 2 todas as instruções possuem o mesmo comprimento, já em outras podem
existir dois ou três comprimentos. Alem disso, as instruções podem ser mais curtas, do mesmo
tamanho ou mais longas do que o comprimento de uma palavra.
1.4.1. Campo Operando (Op.)
O “campo operando”, ou “campos operando” (pois pode haver mais de um campo,
indicando a localização de mais de um dado ou endereço), de uma instrução indica
genericamente o dado que se deseja manipular em um endereço para buscar ou armazenar
um dado ou resultado de uma determinada operação. O dado pode estar explicitamente
colocado:



No próprio campo operando da instrução, ou;
Estar armazenado em uma posição de memória, ou ainda:
Em um registrador de dados do processador, cujo endereço é o que se encontra
no Campo Operando da instrução.
Essa diversidade de apresentação do dado na instrução denomina-se genericamente
modo de endereçamento.
Na prática, o conjunto de instruções definido para um determinado processador ou
família de processadores (como é o caso da arquitetura x86) é sempre constituído de uma mistura
de formatos diferentes, justamente para permitir a melhor aplicação em cada caso, exceto em
arquiteturas do tipo RISC.
No que se refere ao Campo Operando, podem-se analisar dois aspectos:


Quantidade de operandos (3, 2, 1 e 0 operandos);
Modo de endereçamento do dado (modo de interpretação do valor armazenado no
campo operando).
1.5. MODOS DE ENDEREÇAMENTO
Ao analisarmos o formato básico de instruções de máquina e o ciclo de execução de
cada instrução, concluindo que:
a) O endereçamento de uma instrução é sempre realizado através do valor
armazenado no Contador de Instrução (Cl). Todo ciclo de instrução é
iniciado
pela transferência da instrução para o Rl – Registrador de Instrução (usando-se o
endereço contido no Cl).
b) Toda instrução consiste em uma ordem codificada (código de operação), para o
processador executar uma operação qualquer sobre dados. No contexto da
interpretação de uma instrução, o dado pode ser um valor numérico, um caractere
alfabético, um endereço (instrução de desvio).
c) A localização do(s) dado(s) pode estar explicitamente indicada na própria
instrução por um ou mais conjuntos de bits, denominados campo do operando,
ou implicitamente (quando o dado estiver armazenado no único registrador existente no
processador para este fim, como era o caso quando os processadores possuíam o ACC
- acumulador).
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 5 de 7
Curso de Ciências da Computação
Todos os exemplos apresentados até esse ponto definiram o campo operando como
contendo o endereço onde esta localizado o dado referido na instrução; no entanto, essa não é a
única maneira de indicar a localização de um dado, havendo outros modos de endereçamento.
A existência de vários métodos para localizar um dado que está sendo referenciado em
uma instrução se prende a necessidade de dotar os sistemas de computação da necessária
flexibilidade no modo de atender aos diferentes requisitos dos programas, o que é uma
característica típica de arquiteturas ClSC.
Algumas relações possíveis entre comprimento de instrução e comprimento de palavra
são mostradas na Fig. 1.7.
Fig. 1.7 Algumas relações possíveis entre comprimento de uma instrução e comprimento de uma palavra.
Para justificar a existência de muitos métodos de indicar a localização do dado
referenciado na instrução pode-se citar o caso de instruções em que e ineficiente usar 0 dado
armazenado na MP, como, por exemplo, o de um contador, o qual tem um valor fixo inicial e,
durante a execução do programa, e sistematicamente atualizado. Nesse caso, melhor seria se 0
referido contador (dado) fosse inicialmente transferido para um registrador, dentre os que
estivessem disponíveis no processador ela permanecesse (sendo diretamente atualizado no
processador até o final da execução do programa, caso contrário poderia acarretar um
considerável gasto de tempo para os repetidos ciclos de leitura e gravação).
A manipulação de vetores acarreta a necessidade de se estabelecer um método eficaz
de endereçamento para variáveis que ocupam posições contiguas de memória, ocasionando outro
tipo de necessidade de indicar se o dado de forma diferente. E assim por diante.
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 6 de 7
Curso de Ciências da Computação
Dentre os diversos modos de endereçamento desenvolvidos para processadores, os
principais são:
• imediato;
• direto;
• indireto;
• por registrador;
• indexado;
• base mais deslocamento.
A existência de muitos modos de endereçamento de dados em um mesmo conjunto de
instruções e típico de arquiteturas ClSC, pois sem duvida aumenta a complexidade da
decodificação de cada instrução e aumenta a quantidade delas, com isso acarretando todas as
desvantagens já mencionadas quando analisamos a largura do campo código de operação.
Nem todos esses modos estão incluídos nos conjuntos de instruções dos
processadores contemporâneos, mas devem ser descritos não só por razões históricas, mas para
percepção do processo evolutivo da tecnologia.
Disciplina: Projeto Lógico de Computadores (5º/6º Sem - 2014).
Livro: Andrew S. Tanenbaum
Página 7 de 7
Download