Você está na página 1de 42

Arquitetura de Computadores

Tipos e Formatos de Instruções

Prof. Ewerson Carvalho ewerson.carvalho@furg.br


Aula Passada?
Modos de
Endereçamento
Armazenamento de Operandos
IMEDIATO Modos de Endereçamento

DIRETO INDIRETO POR PILHA

INDEXADO

POR
REGISTRADOR REG INDIRETO
Modos de Endereçamento

Acesso Constante

Acesso Variável na Memória

Acesso Ponteiro na Memória

Acesso Registrador (REG)

Acesso Ponteiro em um REG

Acesso Vetor (indice)

Acesso Pilha
Agenda
Parte 2 - Arquitetura de Computadores

Arquitetura do Conjunto de Instruções (ISA) Aula 1

Arquiteturas RISC e CISC Aula 2

Lista de Exercícios Aula 3

Modos de Endereçamento Aula 4

Tipos e Formatos de Instruções Aula 5

Lista de Exercícios Aula 6

Aulas de Dúvidas + TAREFA Aulas 7, 8 e 9

Avaliação Individual Aula 10


MIPS Estudo de Caso
Microprocessor without Interlocked Pipeline Stages
Arquitetura RISC, bem simples (vs. x86)
Obs.: Muito usada para Estudar AOC!!!!

1980 - RISC I - David Patterson (Berkeley) 2017


1981 - MIPS - John Hennessy (Stanford)

John Hennessy David Patterson


MIPS Estudo de Caso
Microprocessor without Interlocked Pipeline Stages
Arquitetura RISC, bem simples (vs. x86)
Obs.: Muito usada para Estudar AOC!!!!

Encontrado em:
Nintendo64
PlayStation, PlayStation2
PlayStation Portable
Roteadores Linksys-CISCO
Tipos de Instruções
Instruções MIPS
Tipos de Instruções
• Instruções Aritméticas
• Instruções Lógicas
• Instruções de Deslocamento
• Instruções de Transferência de Dados
• Instruções de Desvio Condicional
• Instruções de Desvio Incondicional
• Instruções de Ponto Flutuante
• Instruções p/ Operações Atômicas (compartilhamento acesso)
Instruções MIPS
ARITMÉTICAS
Realizam Contas sobre Valores Inteiros
Geram Resultado Numérico

2 Operandos = 2 Registradores ou 1 Registrador + 1 Constante


1 Resultado = 1 Registrador

Exemplos:
ADD Soma 2 Registradores
SUB Subtrai 2 Registradores
ADDI Soma 1 Registrador e 1 Constante
Instruções MIPS
TRANSFERÊNCIA DE DADOS
Transferem Dados entre Memória e Registradores
Obs.: MIPS só opera sobre Registradores!!!

3 Operandos = 2 Registradores e 1 Constante


REG1 = Destino/Fonte
REG2 = ENDEREÇO Memória
Constante = DESLOCAMENTO somado ao Endereço

Exemplos:
LW Load Word Copia palavra da Memória para Registrador
SW Store Word Copia palavra de Registrador para Memória

Obs.: Existem variações de tamanhos (meia palavra, byte)


Existem instruções para carregar constantes
Instruções MIPS
LÓGICAS
Obs.: Similares à Instruções Aritméticas
Executam Operações Lógicas (E, OU, NÃO)

Operações Lógicas são executadas Bit a Bit


Ex.: 1010 OU 0110 = 1110

2 Operandos = 2 Registradores
1 Resultado = 1 Registrador

Exemplos:
AND Realiza o E lógico
OR Realiza o OU lógico
XOR Realiza o OU EXCLUSIVO
NOR Realiza o NÃO-OU
Instruções MIPS
DESLOCAMENTO (SHIFT)
Realizam Deslocamento de Bits
Úteis para Multiplicações/Divisões por 2

2 Operandos = 1 Registrador e 1 Constante


Registrador = Valor a ser deslocado
Constante = Número de Deslocamentos
1 Resultado = 1 Registrador

Exemplos: (existem 5 tipos)


SRL Shift Right Logical novos bits = 0 Ex.: 1010 >> 2 = 0010
SRA Shift Right Arithmetic bits à direita = MSB Ex.: 1010 >> 2 = 1110
Obs.: Importante para Divisão com Sinal (C-2)
Instruções MIPS
DESVIO CONDICIONAL (BRANCH)
if (x == 3) {
Realizam Saltos no Código y = 4;
Alteram valor do PC (Contador de Programa) }
else{
PC ß Endereço da Instrução a ser Executada y = 6;
}
Usa-se em TESTES
Usa-se em REPETIÇÕES while (x < 1000) {
y = y + 1;
}
3 Operandos = 2 Registradores e 1 Constante z = 25;
Registradores = valores comparados
Constante = adicionada ao PC

Exemplos:
BEQ Branch On Equal Atualiza PC, SE valores iguais
BNE Branch On Not Equal Atualiza PC, SE valores diferentes
Instruções MIPS
DESVIO INCONDICIONAL (JUMP)
Obs.: Similares aos BRANCHs
while (1) {
Mas SEM CONDIÇÃO (saltam sempre) y = y + 1;
z = y*2;
}
Usadas em LAÇOS INFINITOS
Usadas em CHAMADAS DE FUNÇÕES
x = 3;
Y = sqrt(25);
1 Operando = 1 Constante ou 1 Registrador z = x + y;
1 Resultado = PC Alterado

Exemplos:
J Jump Salta para Endereço Constante
JR Jump Register Salta para Endereço no Registrador
JAL Jump And Link Salta mas antes Guarda o PC (retorno de função)
Exemplos de Códigos

a = b + c; a = b - c; f = (g+h)-(i+j);

LW $s1, b LW $s1, b LW $s1, g


LW $s2, c LW $s2, c LW $s2, h
ADD $t0, $s2, $s1 SUB $t0, $s2, $s1 ADD $t0, $s2, $s1
SW $t0, a SW $t0, a LW $s3, i
LW $s4, j
ADD $t1, $s4, $s3
SUB $s0, $t1, $t0
SW $s0, f
Formatos de Instruções
Tamanho das Instruções
INSTRUÇÃO = CONJUNTO DE BITS
Subdividida em CAMPOs
Ex: OPCODE Código que indica a OPERAÇÃO (binário)
OPERANDOS VALORES ou ENDEREÇOS dos valores (binário)
RESULTADO ENDEREÇO do Resultado (binário)

TAMANHO de Instrução
Tamanho FIXO
Geralmente igual ao tamanho da palavra de memória
Ex.: Arquitetura MIPS
Tamanho VARIÁVEL
Tamanho depende da Instrução (algumas pequenas, outras grandes)
Ex.: Arquitetura x86
Tamanho das Instruções
Tamanho de Instrução vs. Tamanho da Palavra

FIXO FIXO VARIÁVEL


TAMANHO PALAVRA METADE DA PALAVRA (depende do Opcode)

Fácil Decodificar Fácil Decodificar Decodificação Complexa

Grande Desperdício Desperdício de Espaço Otimizado


de Espaço Espaço

Decodificação = CPU divide a instrução em campos, e entende os campos!


Número de Operandos
NÚMERO de Operandos
Algumas instruções precisam informar endereços

Exemplos:
JUMP Para ONDE saltar? (1 endereço)

LOAD De ONDE o dado deve vir? (1 endereço)

ADD ONDE estão os operandos? (2 endereços)


ONDE armazeno o resultado? (1 endereço)
Número de Operandos
NÚMERO de Operandos
Algumas instruções precisam informar endereços

SEM ENDEREÇO COM 1 ENDEREÇO

COM 2 ENDEREÇOS COM 3 ENDEREÇOS

Obs.: MIPS usa instruções de Tamanho Fixo (32 bits)


Instruções de tamanhos diferentes complicam decodificação!
Registradores MIPS
REGISTRADORES (e convenções uso)
32 REGs de Propósito Geral

Obs.: Ainda existem outros 32 REGs de Ponto Flutuante


Formatos Instruções MIPS
MIPS possui apenas 3 FORMATOS
Tipo R operações com Registradores
Tipo I operações com Valor Imediato
Tipo J operações de Desvios (saltos)

OPCODE

OPCODE

OPCODE

Vamos por partes ...


Formatos Instruções MIPS
Tipo R opera sobre Registradores

OP Código da Operação
RS Número do 1º REG Origem (5 bits para endereçar 32 Regs)
RT Número do 2º REG Origem
RD Número do REG Destino
shamt Número de Deslocamento (usado no shift)
funct Código da Função a Executar (para ULA)

add $t1 $t0 $t2 soma

Ex: add $t2, $t1, $t0


Formatos Instruções MIPS
Tipo I opera sobre Valor Imediato

OP Código da Operação
RS Número REG Base da Operação
RT Número REG Destino
Constante -215 a +215-1

addi $s2 $s1

Ex: addi $s1, $s2, 100


Formatos Instruções MIPS
Tipo J realiza operações com DESVIOS

OP Código da Operação
Endereço DESTINO do Salto

jump

Ex: j 245
Modos Endereçamento MIPS
Modos Endereçamento MIPS
Projeto da ISA
Projeto ISA
FORMATO INSTRUÇÃO depende de Vários Fatores

1) Instruções são parecidas?


Se SIM, é melhor então usar Tamanho Fixo

2) Número de Instruções/Tipos de Instruções necessárias?


Indica o número de Bits do OPCODE

3) Tamanho de Memória do Processo


Indica o número de Bits de ENDEREÇAMENTO

4) Número de Registradores disponíveis


Indica o número de Bits dos OPERANDOS
Tipo R

Tipo I

Tipo J
Instruções para MOVIMENTAÇÃO DE DADOS
Instruções LÓGICAS E ARITMÉTICAS
Instruções para DESLOCAMENTOS

Instruções para Multiplicações e Divisões


Instruções para DESVIOS

Instruções para EXCEÇÕES

Arquitetura de Conjunto de Instruções MIPS (material bem didático)


https://www.embarcados.com.br/arquitetura-de-conjunto-de-instrucoes-mips/
Outros Exemplos
DEST OPCODE SRC1 SRC2
DEST OPCODE SRC1 CONSTANTE IMEDIATA

DEST OP CONSTANTE IMEDIATA

OP DESLOCAMENTO A PARTIR DO PC

DESLOCAMENTO A PARTIR DO PC

Atenção: ISAs RISC são bem mais simples que ISAs CISC !!!!
CISC com Formato Complicado
x86
Complexidade:
• Instruções com Tamanho Variável (1 a 17 bytes)
• Sempre mesmo operando como fonte e destino
• Um operando direto da Memória
• Modos de Endereçamento Complexos

Solução:
• Tenta usar apenas instruções simples
• Compilador EVITA instruções complexas
x86
Deslocamento Valor
na Memória Constante

DESLOCAMENTO IMEDIATO

INSTRUÇÃO

Para endereçamento Indexado

Informações sobre o Operandos (Modo de Endereçamento etc)


x86
Mudanças
1978 8086 é anunciado com 16 bits
1980 Acrescentado coprocessador 8087 (ponto flutuante)
1982 80286 aumenta endereçamento para 24 bits (mais instruções)
1985 80386 estende instruções para 32 bits (novos modos endereçamento)
1989-1995 80486, Pentium e Pentium Pro acrescentam mais instruções
1997 Pentium II adiciona mais 57 instruções MMX
1999 Pentium III adiciona 70 instruções SSE
2001 Adicionadas outras 144 instruções SSE2
2003 AMD aumenta endereçamento para 64 bits (tamanho regs etc)
2004 Intel adota 64 bits

Obs.: Sempre mantendo compatibilidade com versão anterior!!!!


Próxima Aula

Arquitetura de Computadores

Lista de Exercícios

Você também pode gostar