Você está na página 1de 51

ARQUITETURA DE COMPUTADORES

Prof. Lucio André Amorim


Conjunto de instruções

Conteúdo da aula
• Conjunto de instruções
Conjunto de instruções

Objetivos da aula

• Analisar o conjunto de instruções de um computador,


seguindo a arquitetura de Von Neumann, para relacionar a
operação entre seus componentes.
Conjunto de instruções

• O processador é o coração de um computador, sendo


responsável pela execução das instruções de todos os
programas.
• Os comandos das diversas linguagens de programação (alto
nível) facilitam o entendimento das estruturas lógicas e a
criação dos programas.
• Mas, será que o processador executa diretamente esses
comandos ou é necessário transformá-los em instruções num
formato específico para "que a máquina entenda"?
Conjunto de instruções

• Processo de inicialização do computador

BIOS: Basic Input/Output System


POST: Power-On Self-Test
SETUP: Configurações iniciais
Conjunto de instruções

• Ciclo de instruções
Conjunto de instruções

Interpretadores, Compiladores e Tradutores


Programa fonte
• Nós escrevemos while, for, if, else ....
int a = 10, for, while
• O computador só entende 00100110, 11100111, (linguagem de alto nível)
00001110;
• Necessidade de converter os comandos dados em
linguagem de alto nível para linguagem de Compilador
máquina (códigos binários). (conversor)

• O Compilador é o programa que recebe as


instruções em linguagem de alto nível (Programa Programa objeto
fonte) e dá como saída outro programa constituído 00100110, 11100111
de linguagem de máquina (Programa objeto) (linguagem de máquina)
Conjunto de instruções

Interpretadores, Compiladores e Tradutores

• Na realidade, existem três métodos básicos de abordagem na


tradução de linguagem de alto nível para linguagem de máquina:
• Interpretador
• Compilador
• Tradutor
Conjunto de instruções
Interpretador
• Recebe o programa fonte;
• Verifica se o programa está escrito corretamente;
• Converte a primeira instrução em linguagem de máquina;
• Ordena ao computador que execute esta instrução;
• Repete o processo para as demais instruções, até a última instrução do
programa fonte.
• Quando a segunda instrução é trabalhada, a primeira é perdida, isto é,
apenas uma instrução fica na memória em cada instante.
• Se este programa fonte for executado uma segunda vez, novamente
haverá uma nova tradução, comando por comando, pois os comandos em
linguagem de máquina não ficam armazenados para futuras execuções.
Conjunto de instruções
Compilador
• Recebe o programa fonte;
• Verifica se a primeira instrução está escrita corretamente
• Converte a instrução em linguagem de máquina;
• Repete a verificação e a conversão até a última instrução do programa
fonte.
• Caso não ocorra erro na conversão, o computador volta
à primeira instrução, já em linguagem de máquina e realiza a execução de
todas as instruções em sequência.

• Se este programa for executado uma segunda vez, os comandos em


linguagem binária já memorizados em um novo programa completo, em
linguagem de máquina (programa objeto).
Conjunto de instruções
Compilador

• VANTAGEM: Neste processo a execução fica mais rápida em relação ao


uso do Interpretador, pois se economiza o tempo de retradução de cada
instrução a cada nova execução.

• DESVANTAGEM: A cada modificação introduzida no programa fonte é


necessária uma nova tradução completa para obter um novo programa
objeto, o que torna o processo mais dificultoso na fase de
desenvolvimento, quando muitas modificações são feitas.
Conjunto de instruções
Tradutor
• Transforma o programa fonte original em códigos
intermediários onde já existe um tradutor para a linguagem de
máquina.
• As instruções intermediárias são então traduzidas para
linguagem de máquina e então executadas.
• Geralmente, usa-se o termo compilador para se referir a
qualquer um dos três métodos de compilação.
• Para um usuário não profissional, é quase sempre indiferente se o
computador trabalhe com um compilador, interpretador ou com
um tradutor.
Conjunto de instruções

Exemplos de linguagens de programação

Interpretada Compilada
• Java • C
• C# • C++
• Python • Basic
• ASP • Pascal
• BASIC • Delphi
• LUA • Fortran
• VBScript • Visual Basic
Conjunto de instruções
É verificado se os caracteres do programa fonte
Fases da compilação pertencem ao alfabeto da linguagem e identificado
os tokens.
É verificado se as sequências de símbolos (tokens) que o
constituem o programa, representam as estruturas
sintáticas da linguagem de programação (expressões,
comandos)
É verificado se as estruturas sintáticas analisadas fazem
sentido, ou seja, se um identificador declarado como
variável é usado como tal; se existe compatibilidade entre
operandos e operadores em expressões;

Utiliza a representação interna produzida pelo analisador


sintático e gera como saída uma sequência de código objeto.
Também é responsável pela reserva de memória para dados e
variáveis, geração de código para acessar tais posições, seleção
de registradores, etc.
Conjunto de instruções

Geração do código Inclusão de arquivos (referências a arquivos são substituídas pelo


próprio arquivo);
racionalização (substituição de código não oferecido pelo compilador
por código equivalente suportado por ele).

Analisa o código-fonte e o converte para um código-assembly


(versão mnemônica da linguagem de máquina).

Traduz o código assembly para código de máquina (código objeto).


Porém, esta forma é intermediária, não podendo ser lida pelo
programador, nem executada pelo computador.

Carregador - Consiste em tomar o código realocável, alterar os


endereços necessários e colocar o código e os dados na localização
de memória adequada;
Ligador - Consiste em “juntar” o código objeto com as bibliotecas
necessárias para gerar o programa executável.
Conjunto de instruções
Instruções
Conjunto de instruções primitivas de um robô (instruções codificadas)

Será que o robô sabe apertar um parafuso?


Conjunto de instruções
Instruções
Tarefa: aparafusar um objeto na perpendicular do ao chão (90°), a
partir da posição de repouso do robô (braços estendidos para baixo)

A partir de instruções primitivas,


conseguimos realizar tarefas mais
complexas.
Conjunto de instruções
Instruções
• Um computador possui um conjunto básico de instruções primitivas e o
usuário (programador) pode combiná-las de diferentes modos (criar
diferentes programas);

• É assim que um computador, com seu conjunto de instruções de máquina


(primitivas), pode ser empregado para escrever um texto, para controlar
o fluxo de carros em uma região e também em um sistema bancário;

• A inteligência e a versatilidade do sistema estão na combinação das


instruções primitivas (nos programas), no software, visto que o hardware
é imutável (pelo menos para o usuário).
Conjunto de instruções
Instruções
• A instrução de máquina deve especificar para o hardware
(especificamente a unidade de controle) que determinada operação deve
ser realizada.
• somar dois números
• movimentar um dado, etc.

• Após interpretar a instrução, a UC, emite os sinais elétricos de controle


correspondentes a cada micro-operação, possibilitando então, a execução
completa da instrução.
Conjunto de instruções
Instruções
• O projetista de um processador define seu conjunto de instruções, e
com isso é definido quais operações o processador pode realizar.

• Para cada uma das instruções, é definido 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 efetivar a tarefa.
Conjunto de instruções
Exemplo de operações primitivas típicas
• Transferir uma palavra de dados de uma célula para outra;
• Efetuar a soma entre dois operandos e guardar o resultado em um
terceiro operando;
• Desviar incondicionalmente para outro endereço fora de sequência.
• Testar uma condição. Se o teste for verdadeiro, então desviar para outro
endereço fora da sequência.
• Realizar uma operação lógica AND entre dois valores;
• Parar a execução de um programa;
• Adicionar 1 ao valor de um operando;
• Transferir um byte de dados de uma porta de E/S para a MP;
• Transferir um byte de dados da MP para uma porta de E/B;
• Substituir o operando por seu valor absoluto.
Conjunto de instruções
Exemplo de operações primitivas típicas

• Ao longo do tempo, surgiram no mercado duas estratégias para projeto e


implementação de arquiteturas de processadores:
• Conjunto de Instruções Complexo (CISC — Complex Instruction Set
Computer); e
• Conjunto de Instruções Reduzido (RISC -Reduced Instruction Set
Computer).

• Estas duas estratégias possuem como a mais importante de suas


especificações o seu conjunto de instruções.
Conjunto de instruções
Instrução de máquina
• Uma instrução de máquina, basicamente, possui dois elementos ou
campos, cada um deles formado por uma determinada quantidade de bits,
que pode ser entendida como a largura do campo:

• Código de Operação (C.Op.): indica ao processador o que fazer e como


fazer (em inglês: Op Code - Operation Code).
• Campo Operando (Op.): indica ao processador qual dado ou dados a
operação irá se realizar (em inglês: Operand).
Conjunto de instruções
Instrução de máquina
• Exemplos de formatos das instruções
Conjunto de instruções
Instrução de máquina

ADD Salario, taxa (instrução escrita em Assembly)

A quantidade de bits do C.Op (Código de operandos) define a quantidade


de instruções que o processador pode ter. Nesse caso acima temos
28 = 256 instruções, onde 8 é o numero de bits do campo C.Op.
Conjunto de instruções
Instrução de máquina
• Processadores Intel 8086, 8088 e 80286
• C.Op. tinha 1byte de tamanho

• Processadores Intel 386, 486 e Pentium


• C.Op. tinha entre 1 e 2 byte de tamanho

• Processadores Motorola, da família 68000


• C.Op. Instruções de tamanho variável entre ½ e 2 byte
Conjunto de instruções
Instrução de máquina
• Muitas instruções, como em arquiteturas CISC, significa maior
flexibilidade e rapidez da compilação:
• transformação de um comando de linguagem de alto nível em
instruções de máquina é mais simples, o que é uma vantagem.
• Em princípio, programas executáveis menores, pois sendo as
instruções de máquina mais completas aproximam-se das de alto nível.
• Quanto maior o número de instruções, mais o hardware do
processador tende a ser complexo, com maior quantidade de circuitos
digitais para poder fazer face aos elementos necessários à execução de
tantas instruções diferentes.
• Essa é uma das razoes por que processadores CISC têm um custo
maior do que processadores RISC equivalentes.
Conjunto de instruções
Instrução de máquina
• Os campos operandos de uma instrução indica genericamente o dado
que se deseja manipular, o registrador ou endereço de memória para
buscar ou armazenar um dado ou resultado de uma determinada
operação.
• Essa diversidade de apresentação do dado na instrução denomina-se
genericamente de endereçamento.

• No que se refere ao Campo Operando, podem-se analisar dois


aspectos:
• quantidade de operandos;
• modo de endereçamento do dado (modo de interpretação do valor
armazenado no campo operando).
Conjunto de instruções
Instruções com três operandos

Linguagem
assembly

Assembly é uma instrução de máquina expressa de forma simbólica, em vez do seu valor
binário
Conjunto de instruções
Instruções com três operandos
Como seria a execução desta instrução (linguagem em alto nível)

Todas as letras usadas (A, B, C, D, E, F, T1, T2. X) representam variáveis, que


são endereços simbólicos de memória.
Endereços repetidos. Desperdício de memória
Conjunto de instruções
Instruções com dois operandos
Conjunto de instruções
Instruções com dois operandos

• Observe que com dois operandos necessitamos de uma instrução a mais para
executar o mesmo código.
• Observe também que, foram destruídos os valores armazenados nos endereços
correspondentes às variáveis A, B, C e E, o que pode ser um problema.
Conjunto de instruções
Instruções com um operandos
Conjunto de instruções
Comparação por quantidade de operandos

• Observe a quantidade de memória despendida com cada instrução, bem


como a quantidade de acessos à memória (para ciclos de leitura ou de
escrita) em cada caso
Conjunto de instruções
Comparação por quantidade de operandos
Conjunto de instruções
Comparação por quantidade de operandos
• Em termos de gasto de memória, instruções de 3 operandos são
custosas quanto ao uso de espaço. São usadas em processadores RISC.
• Usualmente, as instruções de 2 operandos são empregadas em
operações matemáticas (aritméticas c lógicas).
• O conjunto de instruções x86 utilizando-se utilizam instruções de 1
operando em instruções de desvio, por exemplo.

• Instruções de poucos operandos


• ocupam menos espaço de memória e tornam o projeto do processador
mais simples em virtude das poucas ações que elas induzem a realizar.
• O código binário é algumas vezes maior devido ao aumento da quantidade
de instruções.
Conjunto de instruções

Modos de endereçamento
Vimos até esse ponto que o campo operando contem o endereço
da MP onde está 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:
• Imediato;
• Direto;
• Indireto;
• Por registrador;
• Indexado;
• Base mais deslocamento.
Conjunto de instruções
Modos de endereçamento
Modo Imediato:
• O dados é o próprio valor no campo operando da instrução;
• Apresenta um curto tempo de execução da instrução
• Não gasta ciclo de memória para sua execução, exceto o único requerido
para sua busca.
• É útil:
• para inicialização de contadores;
• na operação com constantes matemáticas;
• para armazenamento de ponteiros em registradores do processador;
• para indicação da quantidade de posições em que um determinado
número será deslocado para a direita ou para a esquerda ( operações de
multiplicação e divisão).
Conjunto de instruções
Modos de endereçamento
Modo Direto:
• O binário contido no campo do operador é o endereço de memória
que contém o dado a ser utilizado (utilizado nos nossos exemplos);
• De simples de acesso, pois requer apenas uma referência à MP para
buscar o dado, sendo, porém, mais lento que o modo imediato devido á
referência à memória.
• Sua limitação é a quantidade de bits disponível para o campo do
operador, pois isso limita a quantidade de endereço de memória que
pode ser endereçado.
• Campo de operador de 32bits endereça até 4G de memória, porém
não é viável criar um campo de operador tão grande.
Conjunto de instruções
Modos de endereçamento
Modo Indireto:
• O valor binário do campo operando representa o endereço de uma
célula, porém esta célula contém um novo endereço que indica o local
na memória em que encontra-se o dado.
• Esse modo possui um duplo endereçamento para o acesso a um dado e
consequentemente, mais ciclos de memoria para buscar o dado.
• O endereço intermediário é conhecido como ponteiro, pois indica a
localização do dado (“aponta” para o dado).

• Não é mais utilizado nas arquiteturas modernas.


Conjunto de instruções
Modos de endereçamento
Endereçamento por Registrador:
• Esse método tem característica semelhante aos modos direto e indireto,
exceto que o endereço mencionado na instrução passa a ser o de um
dos registradores, e não mais de uma célula da MP.
• A primeira vantagem, logo observada, consiste no menor número de
bits necessários para endereçar os registradores, visto que estes
existem em muito menor quantidade que as célula de memória, o que
reduz o tamanho das instruções.
• Outra vantagem é que o registrador possui acesso mais rápido que a
MP.
Conjunto de instruções
Modos de endereçamento
Modo Indexado
• Utilizado para acesso de tipos de dados indexados, como um array.
• O endereço do dado é a soma do valor do campo operando (fixo para
todos os elementos de um dado array) e de um valor armazenado em
um dos registradores do processador.
• Esse modo de endereçamento é uma evolução das técnicas desenvolvidas
desde os primórdios da computação para manipulação de estruturas de
dados especiais.
Conjunto de instruções
Modos de endereçamento
Modo Base mais Deslocamento
• Possui características semelhantes ao modo indexado, visto que o
endereço de acesso a uma célula de memória se obtém através da soma
de dois valores.

• Um valor está inserido no campo apropriado da instrução


(normalmente denominado campo deslocamento — displacement) e o
outro valor inserido em um determinado registrador, denominado
registrador-base ou registrador de segmento (inverso ao modo indexado).
Conjunto de instruções

Conjunto de instruções segundo a definição da máquina Neander, apresentada no livro de


Raul F. Weber (UFRGS), Fundamentos de Arquitetura de Computadores, Ed. Sagra
Luzzatto.
Conjunto de instruções
Dúvidas?
Exercícios

Vamos exercitar:
1) Assinale a alternativa que NÃO apresenta um tipo de instrução que
pode ser realizada
em um processador:
A) Operações matemáticas
B) Movimentação de dados
C) Entrada e saída
D) Operações de multiprogramação
E) Controle
Exercícios

Vamos exercitar:
2) Assinale a alternativa que apresenta o conceito definido como “uma
alteração forçada
da sequência de execução de um programa”.
A) Instrução
B) Repetição
C) Sequência
D) Desvio
E) Seleção
Exercícios

Outros exercícios
Exercícios 1,2,3,4,8,12 (Página 310)
Conjunto de instruções

Próxima aula:
• Memória: hierarquia e operações;
• Subsistema de I/O.

Você também pode gostar