Instrução
Uma instrução é a operação elementar que o processador pode efetuar. As instruções são armazenadas na memória principal, para serem tratadas pelo processador. Uma instrução é composta de dois campos:
O código operacional, representando a ação que o processador deve efetuar;
O código operando, definindo os parâmetros da ação. O código operando depende da operação. Pode tratar-se de um dado ou de um endereço da memória.
Código operacional Campo operando
O número de bytes de uma instrução varia conforme o tipo de dado (a ordem da grandeza é de 1 à 4 bytes).
As instruções podem ser divididas em categorias cujas principais são:
Acesso à memória: acessos à memória ou transferências de dados entre registros. Operações aritméticas: operações tais como: adições, subtrações, divisões ou
multiplicações.
Operações lógicas: operações E, OU, NÃO, NÃO exclusivo, etc. Controle: controle de sequência, conexões condicionais, etc. Registros
Quando o processador executa as instruções, os dados são armazenados, temporariamente, nas pequenas memórias rápidas de 8, 16, 32 ou 64 bits que chamamos registros. Conforme o tipo do processador, o número global de registros pode variar entre uma dezena e várias centenas.
Os principais registros são:
o registrador de dados ou acumulador (ACC), armazenando os resultados das operações aritméticas e lógicas;
o registrador de status (PSW, Processor Status Word), armazenando os indicadores sobre o estado do sistema (retenção, excesso, etc.);
o registrador de instrução (RI), com a instrução de processamento em curso; o contador de programa (CO ou PC para Program Counter), com o endereço da
próxima instrução a ser processada;
CONJUNTO DE INSTRUÇÕES
Quem executa um programa é o hardware e o que ele espera encontrar é um programa em linguagem de máquina (uma sequencia de instruções de máquina em código binário). Um programa em linguagem de alto nível não pode ser executado diretamente pelo hardware. Ele em que ser transformado
(traduzido) para linguagem de máquina por um compilador, antes de ser carregado em memória, para que o hardware possa executá-lo. A linguagem da máquina é composta de códigos binários,
representando instruções, endereços e dados e esta totalmente vinculada ao conjunto de instruções da máquina.
Alto nível – linguagem mais próxima do programador Baixo nível – linguagem mais próxima da máquina Características:
- Código da máquina - Binária
- Usualmente representada por códigos Assembly
Exemplo de um conjunto de instruções de uma máquina “qualquer”
Instrução Significado Operação Código
Load Carregar no acumulador ACC <-- op 0000
Store Salvar na memória op <-- ACC 0001
Add Somar ACC <-- ACC + op 0010
Sub Subtrair ACC <-- ACC - op 0011
Mult Multiplicar ACC <-- ACC * op 0100
Div Dividir ACC <-- ACC / op 0101
Jmp Desviar CI <-- op 0110
Jz Desviar, se ACC igual zero CI <-- op, se ACC = 0 0111 Jnz Desviar, se ACC não zero CI <-- op, se ACC != 0 1000
Read Ler entrada op <-- entrada 1001
Print Imprimir saida <-- op 1010
Stop Terminar 1100
Serão usadas as seguintes convenções:
Operador Significado Operador Significado
+ adição ~ not (negação)
- subtração = igual
* multiplicação != diferente
/ divisão | or (AND)
<-- atribuição ^ exclusive or (XOR)
<< deslocamento à esquerda & and (E)
>> deslocamento à direita Formato das instruções
Código de operação (OPCODE) Operando 1 (OP1) OP 2 OP 3...
Código da Operação ou OPCODE – identifica a operação a ser realizada pelo processador. É o campo da instrução cujo valor binário identifica a operação a ser realizada. Este código é a entrada no
decodificador de instruções na UC (unidade de controle). Cada instrução deverá ter um código único que a identifique.
Operando (s) – é o campo da instrução cujo valor binário sinaliza a localização do dado (ou é o próprio dado) que será manipulado (processado) pela instrução durante a operação. Em geral, um operando identifica o endereço de memória onde está contido o dado que será manipulado, ou pode conter o endereço onde o resultado da operação será armazenado. Finalmente, um operando pode também indicar um Registrado (que conterá o dado propriamente dito ou um endereço de memória onde está armazenado do dado). Os operandos fornecem os dados da instrução.
Exemplo:
ADD OP1 OP2 => (OP1)<-- (OP1) + (OP2) + conteúdo de OP1 e OP2 e armazena o res em OP1 ADD OP1 OP2 OP3 => (OP3)<-- (OP1) + (OP2) + conteúdo de OP1 e OP2 e armazena o res em OP3 ADD OP1 => (ACC)<-- (ACC) + (OP1) + conteúdo de OP1 e ACC e armazena o res em ACC
Elementos de uma instrução: - Código de operação
“faça isso”
- Referência a Operando Destino “coloque a resposta aqui” - Endereço da próxima instrução
“quando tiver terminado, vá para a próxima posição”
Localização dos Operandos:
- Onde estão os Operandos fonte e destino? Memória principal
Registrador do CPU
Dispositivo de entrada e saída Representação da instrução:
- cada instrução é representada por uma única sequencia de bits - para programadores são usados os mnemônicos: ADD, SUB, LOAD - operando pode ser representados de maneira simbólica: ADD x, y Tipos de instrução:
Pode ser usado mais de um formato de instrução: - processamento de dados
- armazenamento de dados - movimentação de dados - controle de fluxo de programa Tamanho do código da operação 0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
Quantas combinações possível, sem repetição, consigo com 8 posições de 2 produtos? R=
Considere um computador hipotético no qual, em sua arquitetura, o processador possui apenas um registrador de armazenamento de dados, denominado acumulador, com tamanho de 16 bits e no formato de suas instruções reservam-se 4 bits para os códigos de operação. Considerando-se ainda que o registrador de endereços tenha 12 bits de tamanho, pode-se afirmar que neste computador há: 16 códigos de operação.
Tipos de Operandos - números
Números
- inteiro e ponto fixo - ponto flutuante - decimal
Decimal – representado por 4 bits: 0 = 0000
1 = 0001 8 = 1000
BCD – binary coded decimal 246
1 1 1 1 0 1 1 0
0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 Caracteres