Buscar

Cap07 - Conjuntos de Instruções

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Conjuntos de Instruções
Conjunto de instruções
O “limite” que separa a visão do projetista de computador da visão do programador de computador.
Características das instruções de máquina
Elementos de uma instrução de máquina
Código de operação (opcode, ou operation code): código binário que especifica a operação a ser realizada.
Referência à operando fonte: operandos fonte são operandos que são entradas para a operação.
Referência à operando destino: a operação pode produzir um resultado
Referência à próxima instrução: endereço da instrução a ser executada após o término da atual. (pode ser omitido caso a próxima venha na sequência)
Representação da instrução
Internamente, as instruções são armazenadas em binário.
Para melhor entendimento, lidamos com representações simbólicas
Os opcodes são representados por abreviações (mnemônicos) que indicam a operação. Ex:
ADD – Adiciona
SUB – Subtrai
MUL – Multiplica
DIV – Divide
LOAD – Carrega dados da memória
STOR – Armazena dados na memória
Representação da instrução
Operandos também podem ter representação simbólica
X = 513
Y = 514
ADD R, Y
*Soma o valor contido no local Y (endereço 514) ao registrador R (endereço 513)
Tipos de instrução
Processamento de dados – Instruções lógicas e aritméticas
Armazenamento de dados – Movimentação de dados de/para registrador ou locais de memória.
Movimentação de dados – Instruções de E/S
Controle – Instruções de teste e desvio.
Números de endereços
Uma arquitetura pode ser descrita pela quantidade de endereços contidos em uma instrução
Instruções aritméticas e lógicas tendem a exigir mais operandos
Praticamente todas as operações de aritmética e lógica são unárias (um operando de origem) ou binárias (dois operandos de origem)
É necessário mais um operando para armazenar o resultado, e outro para o endereço da próxima instrução (nas arquiteturas atuais, o último é obtido pelo registrador PC).
Na maioria das arquiteturas, casa instrução possui um, dois ou três endereços de operando. Podem ocorrer instruções de zero endereços, aplicadas a pilhas.
Números de endereços
Programas para executar 
 
Instrução
Comentário
SUB Y, A, B
MPY T, D, E
ADD T, T, C
DIV Y, Y, T
Y ← A – B
T ← D X E
T ← T + C
Y ← Y / T
Instruções com três endereços
Instrução
Comentário
MOVE Y, A
SUB Y, B
MOVE Y, D
MPY T, E
ADD T, C
DIV Y, T
Y ← A
Y ← Y – B
T ← D
T ← T X E
T ← T + C
Y ← Y / T
Instruções com dois endereços
Instrução
Comentário
LOAD D
MPY E
ADD C
STOR Y
LOAD A
SUB B
DIV Y
STOR Y
AC ← D
AC ← AC X E
AC ← AC + C
Y ← AC
AC ← A
AC ← AC - B
AC ←AC / T
Y ← AC
Instruções com um endereço
* AC = Acumulador
Projeto do conjunto de instruções
Questões básicas de projeto:
Repertório de operações: Quantas e quais operações deve oferecer, e com que complexidade
Tipos de dados sobre os quais as operações são realizadas
Formato da instrução: tamanho em bits, nº de endereços, tamanho dos campos...
Registradores: Numero de registradores do processador que podem ser referenciados pelas instruções e seu uso
Endereçamento: O modo ou modos pelos quais o endereço de um operando é especificado
Tipos de operandos
Principais tipos de dados
Endereços (reais ou virtuais, são representados como inteiros sem sinal)
Números
Caracteres
Dados lógicos
Números
Tipos mais comuns:
Inteiros binários (ponto fixo binário)
Ponto flutuante binário
Decimal
Representação mais comum: Decimal agrupado (quatro bits representando um número ou sinal. Ex: 0 = 0000, 1 = 0001 ... 8 = 1000, 9 = 1001, + = 1100 e - = 1101)
Usado para evitar overhead na conversão binário/decimal, em operações que utilizem mais E/S do que cálculos.
Caracteres
Texto representado como string de caracteres
É necessário um “padrão” de representação
Formatos mais comuns:
IRA (International Reference Alfabet), conhecido como ASCII (American Standard Code for Information Interchange)
EBCDIC (Extended Binary Coded Decimal Interchange Code)
<number>
Dados Lógicos
Normalmente, cada palavra (ou outra unidade endereçável, como byte, meia palavra, etc) é tratada como uma única unidade de dados
Porém, pode ser possível ter uma unidade de n bits, onde cada bit corresponde a um item de dado. Quando vistos dessa forma, são considerados dados lógicos.
Essa representação é mais eficiente para armazenar arrays de dados booleanos.
Dados lógicos
0
1
1
0
1
1
1
0
Dado comum
Dados lógicos
Unidade de dados
0
1
1
0
1
1
1
0
Unidades de dados
Tipos de operações
Tipos de operações
Transferência de dados
Aritmética
Lógica
Conversão
E/S
Controle do sistema
Transferência de controle
Transferência de dados
Realiza as seguintes tarefas (ou quase todas):
Calcula o endereço de memória, com base no modo de endereço
Se o endereço se referir à memória virtual, traduzir de endereço virtual para real.
Determinar se o item endereçado está na cache
Se não, emitir um comando para o módulo de memória.
Transferência de dados
Operação
Descrição
Move (transferir)
Transfere palavra ou bloco da origem ao destino
Store (armazenar)
Transfere palavra do processador para a memória
Load (carregar)
Transfere palavra da memória para o processador
Exchange
Troca o conteúdo da origem e do destino
Clear (reset)
Transfere palavra de 0s para o destino
Set
Transfere palavra de 1s para o destino
Push
Transfere palavra da origem para o topo da pilha
Pop
Transfere palavra do topo da pilha para o destino
Operações aritméticas
Operações aritméticas básicas (adição, subtração, subtração e divisão) para várias formas de representação de números (inteiros/ponto fixo, ponto flutuante e decimal agrupado)
Outras operações possíveis:
Absolute – Valor absoluto do operando
Negate – Inverte o sinal do operando
Increment – Soma 1 ao operando
Decrement – Subtrai 1 do operando
Operações lógicas
Manipulam bits individuais, e são inspiradas na lógica booleana.
Mais conhecidas:
NOT (Complemento)
AND
OR
NAND
NOR
XOR
Operações lógicas
Operação
Descrição
Test
Testa condição especificada; define flag(s) com base no resultado
Compare
Faz comparação lógica ou aritmética de dois ou mais operandos; Define flag(s) com base no resultado
Set control variables
Classe de instruções para definir controles para fins de proteção, tratamento de interrupção, controle de tempo, etc.
Shift
Desloca o operando para a esquerda/direita, introduzindo constantes na extremidade
Rotate
Desloca ciclicamente (o bit que seria descartado na shift é alocado na posição que ficaria vazia) o operando para a esquerda/direita de uma extremidade à outra
Operações de conversão
Mudam o formato, ou operam sobre o formato dos dados. (Ex: decimal → binário)
Operação
Descrição
Translate
Traduz valores em uma seção da memória com base em uma tabela de correspondências
Convert
Converte o conteúdo de uma palavra de uma forma para outra (por exemplo, de decimal agrupado para binário)
*Wololo não relacionado
Operações de entrada/saída
Operação
Descrição
Input (leitura)
Transfere dados da porta de E/S ou dispositivo especificado para o destino (por exemplo, memória principal ou registrador do processador)
Output (escrita)
Transfere dados da origem especificada para porta de destino ou E/S
Start I/O
Transfere instruções para o processador de E/S para iniciar operações de E/S
Test I/O
Transfere instruções destatusde sistema de E/S para destino especificado
Operações de transferência de controle
Alteram a sequencialidade da execução de instruções, permitindo o uso de desvios condicionais, saltos, loops, chamadas a procedimentos, etc.
Operações de transferência de controle
Operação
Descrição
Jump (Desvio)
Transferência incondicional; carrega PC com endereço especificado
Jump conditional
Testa condição especificada; ou carrega PC com endereço especificado ou não faz nada, com base na condição
Jump to subroutine
Coloca informação de controle do programa atual em local conhecido;
salta para endereço especificado
Return
Substitui conteúdo do PC por outro registrador de local conhecido
Execute
Busca operando do local especificado e executa como instrução; Não modifica o PC
Skip
Incrementa o PC para saltar para a próxima instrução
Skip conditional
Testa condição especificada; ou salta ou não faz nada, com base na condição
Halt
Termina a execução do programa
Wait (hold)
Termina a execução do programa; testa condição especificada repetidamente; retoma a execução quando a condição é satisfeita
No operation
Nenhuma operação é realizada, mas a execução do programa continua
Endereçamento
Endereçamento
Questões importantes:
Como é especificado o endereço de um operando?
Como são organizados os bits de uma instrução para definir o endereço do operando e a operação dessa instrução?
Como especificar uma grande faixa de endereços em diversas localizações, usando campos de endereço relativamente pequenos?
Tipos de endereçamento
Imediato
Direto
Indireto
Registrador
Indireto por registrador
Deslocamento
Pilha
Endereçamento
Todas as arquiteturas de computadores oferecem mais que uma forma de endereçamento, ficando o processador responsável por decidir qual está sendo usada na instrução.
Para isso são usados “campos de modo” bits extras que dizem qual a forma de endereçamento.
Na interpretação do endereço efetivo:
Em sistemas sem memória virtual, o endereço efetivo é um endereço da Memória principal ou um registrador
Em sistemas com memória virtual, o endereço efetivo é um endereço virtual ou um registrador
Endereçamento imediato
Forma mais simples de endereçamento, onde o valor do operando está presente na instrução
Geralmente usado para definir e utilizar constantes ou definir valores iniciais de variáveis
Vantagem: não precisa de nenhuma referência à memória além da carga da instrução em si.
Desvantagem: o tamanho do número é limitado ao do campo de endereço, valor pequeno se comparado ao tamanho da palavra.
Endereçamento imediato
Operando
Instrução
Endereçamento direto
O campo de endereço contém o endereço efetivo do operando.
Já foi comum nas primeiras gerações de computadores, mas não é mais utilizado devido ao espaço de endereços limitado.
Endereçamento direto
A
Instrução
Memória
Operando
Endereçamento indireto
O campo de endereço não referencia diretamente o operando, mas sim uma palavra na memória que, por sua vez, tem o endereço completo do operando.
Vantagem: se o tamanho da palavra é N, temos um espaço de endereçamento de tamanho 2N.
Desvantagem: Uso de mais uma referência à memória.
Endereçamento indireto
Instrução
Memória
Operando
A
Endereçamento de registradores
Mesmo princípio do endereçamento direto, mas faz referência a um registrador ao invés de um endereço da MP.
Vantagens: campo de endereço pequeno; não há necessidade de referências à memória que consumam tempo.
Desvantagem: espaço de endereçamento limitado.
Os valores que permanecerão nos registradores por mais tempo devem ser definidos de maneira eficiente pelo compilador.
Endereçamento de registradores
R
Instrução
Memória
Operando
Endereçamento indireto por registradores
Semelhante ao endereçamento indireto, mas o campo de endereço referencia um local de memória ou um registrador.
Mesmas vantagens e desvantagens do endereçamento indireto comum.
Endereçamento indireto por registradores
Instrução
Memória
Operando
R
Endereçamento por deslocamento
Combinação de endereçamento direto e endereçamento indireto de registradores.
A instrução possui dois campos de endereço, dos quais pelo menos um é explícito. O outro aponta para algum valor que é somado ao primeiro e produz o endereço real.
Endereçamento por deslocamento
R
A
Instrução
Memória
+
Registradores
Endereçamento de pilha
Vetor linear de posições.
Lista LIFO.
Endereçamento implícito (instruções de máquina não precisam incluir uma referência de memória, e sim operar no topo da pilha.
Endereçamento de pilha
Instrução
Topo da pilha de registradores
Implícito
Formatos de instruções
Tamanho da instrução
Deve considerar:
Quantidade de instruções e espaço de endereçamento desejada pelos programadores X desperdício no armazenamento e aumento no tráfego das instruções.
O tamanho da instrução deve ser múltiplo do tamanho de um caractere (normalmente 8 bits), e do tamanho de números de ponto fixo. Deve ser também relacionado ao tamanho de transferência da memória.
Alocação de bits
Os bits da instrução devem ser distribuídos de acordo com:
Número de modos de endereçamento
Número de operandos
Registrador vs. Memória
Número de conjuntos de registradores
Intervalo de endereços
Granulidade do endereço (endereçar bytes ou palavras, dependendo do projeto)

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais