Sie sind auf Seite 1von 35

Aula 14: Instruções e Seus Tipos

Diego Passos

Universidade Federal Fluminense

Fundamentos de Arquiteturas de Computadores

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 1 / 35


Conceitos Básicos

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 2 / 35


Processador e Instruções

Processador é um dispositivo que opera em ciclos.


Ciclos de execução de instruções.
▶ Pequenas tarefas executadas sobre determinados operandos.

Buscar Instrução Interpretar Instrução Executar Instrução

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 3 / 35


Instruções de Máquina

Individualmente, instruções são simples.


▶ Não realizam tarefas complexas.
▶ e.g., não há instrução de máquina para verificar a ortografia de uma palavra em um texto.
A composição/sequência de várias operações mais simples resulta em tarefas mais
complexas.
Exemplos de tarefas simples (para as quais podem existir instruções de máquina):
▶ Operações lógicas/aritméticas simples sobre dois operandos.
▶ Movimentação de dados entre a memória e registradores.
▶ Alterações nos valores de certos registradores.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 4 / 35


Conjunto de Instruções

Também chamado de ISA (do inglês, Instruction Set Architecture).


Nome dado ao grupo de todas as instruções disponíveis em um processador.
▶ Processadores diferentes podem disponibilizar instruções diferentes.
▶ Em outras palavras, processadores diferentes podem ter conjuntos de instruções diferentes.
O conjunto de instruções de um processador deve permitir a implementação de qualquer
tarefa computável.
▶ i.e., deve haver um grupo mínimo de instruções que combinadas possam resultar em
qualquer tarefa computacional.
▶ Em outras palavras, algoritmos escritos em linguagens de alto nível podem ser traduzidos
para sequências destas instruções.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 5 / 35


Conjunto de Instruções: Reduzido vs. Extenso

Respeitando este conjunto mínimo necessário de instruções, processadores podem


implementar conjuntos de instruções maiores ou menores.
▶ Há méritos e desvantagens em ambas as abordagens.
▶ Discutiremos isso em mais detalhes na última aula do curso.
De toda forma, há processadores reais com conjuntos de instruções grandes e pequenos.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 6 / 35


Conjunto de Instruções: Família

Processadores diferentes podem implementar conjuntos de instruções diferentes.


▶ Mas isso nem sempre ocorre.
▶ De fato, é comum que um novo processador herde o conjunto de instruções de um
modelo mais antigo.
Distinção importante:
▶ Conjunto de instruções: que operações estão disponíveis.
▶ Microarquitetura: como estas operações são implementadas.
Processador mais novo pode implementar o mesmo conjunto de instruções, mas de
maneira mais eficiente.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 7 / 35


Conjunto de Instruções: Família (II)

Há vários motivos “repetir” um conjunto de instruções:


▶ Não “reinventar a roda”: reutilizar fórmula bem sucedida.
▶ Permitir reutilização de compiladores.
▶ Permitir compatibilidade de código executável binário.
Algumas vezes, pode-se ganhar desempenho alterando o conjunto de instruções.
▶ Mas normalmente, maiores evoluções estão na forma de implementá-lo.
Permite o lançamento de processadores mais rápidos, mas compatíveis.
▶ Consumidor pode atualizar computador.
▶ Sem alterar software utilizado.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 8 / 35


Conjunto de Instruções: Família (III)

Exemplos de conjuntos de instruções bem sucedidos:


▶ i368 (ou x86): processadores Intel, AMD (entre outros) de 32 bits.
▶ x64 86: processadores Intel, AMD (entre outros) de 64 bits.
▶ MIPS: extensivamente usada em dispositivos embarcados (roteadores) e consoles (Nintendo
64, Playstation 1 e 2, PSP).
▶ PowerPC: usado em carros, consoles (Wii, Wii U, XBox 360, Playstation 3).
▶ ARM: conjunto de instruções mais popular do mundo.
⋆ Domina os smartphones (95%).
⋆ Apenas em 2013, 10 bilhões de processadores produzidos.
⋆ Também presente em tablets, aparelhos de TV, . . .
⋆ Começa a se popularizar no mercado de servidores.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 9 / 35


Conjunto de Instruções: Família (IV)

Note que algumas vezes processadores de uma mesma família estendem o conjunto de
instruções.
▶ Acrescentam instruções.
▶ Objetivo: permitir melhor desempenho de certos tipos de aplicação.
Mas instruções que já existiam são mantidas.
▶ Compatibilidade é garantida.
Exemplo:
▶ Instruções MMX adicionadas ao Pentium, em 1997.
▶ Além das instruções tradicionais do i386.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 10 / 35


O Conjunto de Instruções do MIPS

A arquitetura MIPS é relativamente simples.


▶ Ao menos em comparação com outras, como a x86.
Por este motivo, esta arquitetura é comumente adotada em cursos de Arquiteturas de
Computadores.
▶ E livros didáticos da área.
No restante deste curso, utilizaremos a arquitetura MIPS e seu conjunto de instruções
como estudo de caso.
▶ Exemplificaremos conceitos com ela.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 11 / 35


Representação de uma Instrução

Assim como qualquer outro dado em memória, instruções são armazenadas como
conjuntos de bits.
Em algumas arquiteturas, o tamanho de uma instrução é fixo.
▶ Geralmente, do tamanho da palavra do processador.
▶ e.g., MIPS.
Em outras, há instruções de tamanhos variáveis.
▶ i.e., algumas instruções são curtas, outras mais longas.
▶ e.g., família x86.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 12 / 35


Representação de uma Instrução (II)

O conjunto de bits de uma instrução pode ser dividido em vários subconjuntos.


▶ Ou campos.
▶ Cada um com uma semântica específica.
Exemplos de campos típicos:
▶ Opcode: código da operação, número que especifica operação a ser executada.
▶ Operandos: representação numérica dos operandos sobre os quais operação será realizada.
⋆ Ou de onde obtê-los.
▶ Resultado: representação numérica de onde guardar o resultado da operação.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 13 / 35


Representação de uma Instrução (III)

Exemplo de instrução de soma no MIPS (32 bits):

0 0 0 0 0 0 1 0 0 0 1 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0

Opcode: Operando 1: Operando 2: Resultado: Campo não Função:


000000(2) = 0(10) 10001(2)=17(10) 10010(2)=18(10) 01000(2)=8(10) Utilizado 100000(2)=32(10)
Nesta
Significado: Significado: Significado: Significado: Instrução Significado:
Operação Lógica Primeiro Segundo Armazenar (deve sempre Operação de
ou Operando está Operando está Resultado ser 0) Soma
Aritmética no Reg. 17 no Reg. 18 no Reg. 8

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 14 / 35


Tipos de Instrução de Máquina

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 15 / 35


Instruções e Seus Propósitos

Geralmente, podemos dividir as instruções de um conjunto de instruções de acordo com o


propósito.
▶ Objetivo.
▶ Tipo de operação realizada.
▶ Tipo de dado manipulado.
Categorias comuns:
▶ Instruções aritméticas.
▶ Instruções de transferência de dados.
▶ Instruções lógicas.
▶ Instruções de deslocamento.
▶ Instruções de desvio condicional.
▶ Instruções de desvio incondicional.
▶ Instruções de ponto flutuante.
▶ Instruções para operação atômica.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 16 / 35


Instruções Aritméticas

Instruções que realizam contas sobre valores inteiros.


▶ Na nossa classificação, há um grupo separado para operações sobre ponto flutuante.
Em geral, recebem dois operandos e têm um resultado numérico.
Na arquitetura MIPS, operandos são necessariamente registradores ou constantes
especificadas na própria instrução.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 17 / 35


Instruções Aritméticas (II)

Exemplos (do MIPS):


▶ Instrução add:
⋆ Soma os valores de dois registradores.
⋆ Resultado é guardado também em um registrador.
⋆ Registradores podem ser todos diferentes, ou não.
▶ Instrução sub:
⋆ Equivalente à add, mas faz subtração.
▶ Instrução addi.
⋆ Parecida com a add, mas um dos operandos é uma constante armazenada na própria instrução.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 18 / 35


Instruções de Transferência de Dados

Em geral, instruções de processamento (e.g., aritméticas, lógicas) operam sobre:


▶ Constantes, presentes na própria instrução.
▶ Valores guardados em registradores.
Em outras palavras, elas não operam diretamente sobre dados na MP.
Mas registradores são pequenos.
▶ Não podemos armazenar todos os dados do programa neles.
▶ A maior parte dos dados estará em MP.
Solução:
▶ Trazer dados da MP para os registradores.
▶ E levar dados dos registradores para a MP.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 19 / 35


Instruções de Transferência de Dados (II)

Logo, precisamos de instruções que sejam capazes de fazer estas transferências.


Exemplos (do MIPS):
▶ Instrução load word:
⋆ Traz uma palavra da memória principal para um registrador.
⋆ Recebe como “operandos” dois registradores e uma constante.
⋆ Um dos registradores é o destino.
⋆ O endereço da palavra a ser trazida é dado pela soma do outro registrador com a constante.
▶ Instrução store word:
⋆ Inverso da load word.
⋆ Armazena valor de um registrador de origem em um endereço da MP.
⋆ Endereço é dado pela soma de um registrador com uma constante.

Há também variações para outros tamanhos de dados.


▶ Meia palavra, byte.
Há também instruções para carregar um valor constante (na própria instrução) para um
registrador.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 20 / 35


Instruções Lógicas

Similares às instruções aritméticas.


Mas executam operações de lógica.
▶ Bit 0 representa o falso lógico.
▶ Bit 1 representa o verdadeiro.
Operações lógicas são executadas bit a bit.
▶ Operandos são números com vários bits.
⋆ Geralmente, uma palavra completa.
▶ Operações são feitas para cada par de bits correspondentes dos operandos.
▶ e.g., com 4 bits, uma operação lógica OU entre 1010 e 0110 resulta em 1110.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 21 / 35


Instruções Lógicas (II)

Exemplos (do MIPS):


▶ Instrução and:
⋆ Realiza a operação lógica E bit a bit.
⋆ Operandos são dois registradores.
⋆ Resultado também é colocado em um registrador.
▶ Instrução or :
⋆ Similar à and, mas efetua a operação lógica OU.
▶ Instrução xor :
⋆ Similar às anteriores, mas a operação é de OU Exclusivo.
▶ Instrução nor :
⋆ Idem, mas para a operação de Não-OU.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 22 / 35


Instruções de Deslocamento

Algumas vezes é útil “deslocarmos” os bits de um número.


▶ Para a esquerda ou para a direita.
▶ Operação conhecida em inglês como shift.
Exemplo de utilidade aritmética:
▶ Deslocar bits uma casa para a esquerda multiplica por dois.
▶ Deslocar bits uma casa para a direita divide por dois.
Há ainda outras utilidades na manipulação de bits em geral.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 23 / 35


Instruções de Deslocamento (II)

O tipo mais comum de shift é o lógico.


▶ No shift para a direita, bits à esquerda são completados com zero.
▶ No shift para a esquerda, bits à direita são completados com 0.
▶ e.g., com 4 bits, 0101 <<1 = 1010, 0101 >>1 = 0010.
Há ainda o shift à direita aritmético.
▶ Bits adicionados à esquerda são iguais ao bit mais significativo do operando.
▶ e.g., com 4 bits, 0101 >>1 = 0010, 1101 >>1 = 1110.
Shifts aritméticos são úteis para fazer divisões por 2 em números negativos em
complemento a 2.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 24 / 35


Instruções de Deslocamento (III)

Na arquitetura MIPS, há 6 tipos de instruções de shift disponíveis.


▶ Shifts à esquerda, à direita, aritiméticos à direita.
▶ Quantidade de bits deslocados dado por constante (na própria instrução) ou por valor em
registrador.
Em todas as instruções, o valor a sofrer o deslocamento é sempre lido de um registrador.
E resultado é guardado em outro registrador (potencialmente diferente).

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 25 / 35


Instruções de Desvio Condicional

Também comumente chamadas de instruções de branch.


Alteram o valor do registrador PC, caso uma determinada condição seja verdadeira.
▶ Ou auxiliam nesta tarefa.
Lembrando:
▶ PC é um registrador especial.
▶ Armazena endereço da próxima instrução a ser executada.
▶ Geralmente, instruções são executadas em sequência.
▶ Mas às vezes precisamos saltar para outra parte do código.
▶ Exemplos?

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 26 / 35


Instruções de Desvio Condicional (II)

Instruções de branch são necessárias para dar suporte à condicionais e repetições em


linguagens de alto nível.
Alguns exemplos (em C):

if (x == 3) { // Instrucao de branch while (x < 100) { // Instrucao de branch


y = 4;
} y = y + 1;
else { x = x + y;
y = 6; }
} x = x * 4;

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 27 / 35


Instruções de Desvio Condicional (III)

Há diversas pequenas variações das instruções de branch em cada arquitetura.


Alguns exemplos do MIPS:
▶ Instrução branch on equal:
⋆ Operandos são dois registradores e uma constante numérica.
⋆ Compara os valores dos registradores.
⋆ Se forem iguais, soma ao PC à constante multiplicada por 4, e mais 4.
▶ Instrução branch on not equal:
⋆ Idem, mas PC é mudado se valores foram diferentes.
▶ Instrução set on less than:
⋆ Recebe dois registradores como operandos e mais um para o resultado.
⋆ Se o primeiro operando é menor que o segundo, resultado é 1.
⋆ Usado com branch on equal para comparações do tipo menor que.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 28 / 35


Instruções de Desvio Incondicional

Também chamadas de instruções de jump, ou salto.


Parecidas com as instruções de branch, mas não há condição a ser testada.
▶ Valor do PC é mudado sempre.
▶ Programa sempre “salta” para outra instrução.
Utilidades?

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 29 / 35


Instruções de Desvio Incondicional (II)

Em linguagens de alto nível, instruções de jump ocorrem em vários casos. Por exemplo:
▶ Estruturas como goto.
▶ Loops infinitos.
▶ Chamadas de função.
Exemplos (em C):

if (x == 3) { while (1) { y = 4;
goto erro; // Jump x = sqrt(5); // Jump
} // Espera nova conexao. y = y + x;
y = 6; // Trata requisicao.
erro: //...
printf("Houve algum erro!\n"); }// Jump

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 30 / 35


Instruções de Desvio Incondicional (III)

Exemplos (no MIPS):


▶ Instrução jump:
⋆ Recebe um único operando: uma constante na própria instrução.
⋆ Valor do PC é alterado para 4 vezes o valor da constante concatenada com os 4 bits mais
significativos do PC.
▶ Instrução jump register :
⋆ Parecido, mas o operando é um registrador.
⋆ Valor do PC é alterado para valor do registrador especificado.
▶ Instrução jump and link:
⋆ Idêntica à jump, mas adicionalmente guarda o valor atual do PC no registrador 31.

Qual é a utilidade da instrução jump and link?

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 31 / 35


Formatos de Instruções

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 32 / 35


Instruções e Seus Formatos

Instruções diferentes precisam de operandos diferentes.


▶ Ou, mais genericamente, parâmetros diferentes.
As diferenças estão tanto no número, quanto no tipo.
▶ e.g., instrução jump recebe apenas um parâmetro vs. três na instrução add.
▶ Instrução add recebe três registradores vs. dois (e uma constante) na addi.
Outra diferença: número de bits de cada parâmetro.
▶ e.g., uma constante pode usar 16 ou 26 bits no MIPS.
De alguma forma, processador “conhece” o formato de cada instrução.
▶ Sabe como separar os bits da instrução nos grupos adequados.
▶ E o que cada grupo representa.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 33 / 35


Formatos de Instrução no MIPS

No MIPS, as instruções podem ser divididas de acordo com seu formato.


Há três formatos, no total:
▶ Formato R: instruções que recebem três registradores como parâmetros.
▶ Formato I: instruções que recebem dois registradores e um imediato (constante) como
parâmetros.
▶ Formato J: para instruções do tipo jump, que recebem apenas um imediato (constante)
como parâmetro.
Em qualquer um dos três tipos, os 6 bits mais significativos representam o OpCode.
▶ Código numérico que define a operação.
▶ Ou ao menos seu tipo.
Todas as instruções têm um comprimento de 32 bits.
▶ O que varia, portanto, são os 26 bits menos significativos.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 34 / 35


Formato de Instrução no MIPS (II)

Tipo Formato (bits)


R opcode (6) rs (5) rt (5) rd (5) shamt (5) função (6)
I opcode (6) rs (5) rt (5) imediato (16)
J opcode (6) endereço (26)

Em todos os formatos, os nomes dos campos querem dizer:


▶ rs, rt (formato R): registradores com valores de entrada para a instrução.
▶ rd, rt (formato I): registrador de resultado.
▶ shamt: quantidade de bits deslocados.
▶ imediato: constante numérica.
▶ endereço: constante numérica.
▶ função: similar ao opcode, define mais especificamente o operação realizada.
⋆ e.g., para operações aritméticas, o opcode define apenas que a instrução é uma operação
aritimética.
⋆ Neste caso, o campo função determina se é uma soma, subtração, etc.

. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .

Diego Passos (UFF) Instruções e Seus Tipos FAC 35 / 35

Das könnte Ihnen auch gefallen