< Coluna em Fórum PCs >
|
||
20/02/2006
|
<
Computadores XXV: O conjunto de instruções, > |
Agora que conhecemos a arquitetura interna de nossa UCP elementar e o formato de suas instruções, poderemos criar seu conjunto de instruções. Será um modestíssimo conjunto, pois como na coluna anterior “Instruções” decidimos que o código da instrução terá apenas quatro bits, o numero total de instruções não poderá exceder em mais de uma unidade o maior número que “cabe” em quatro bits. Esse número é “1111b” (o “b” do final indicando “binário”), que corresponde a “15d” (“d” de decimal). Portanto nosso conjunto de instruções não poderá ter mais de dezesseis membros. INSTRUÇÕES DE CONTROLE DE FLUXO: Instruções que interrompem o programa (e nesse caso não tem operando) ou alteram seu fluxo (e nesse caso o operando é um endereço a ser escrito no registrador denominado Ponteiro de Instruções que contém o endereço da próxima instrução a ser executada). Instrução 00; Formato: {[0000 00000000]}; Descrição: Interrompe o processamento e devolve o controle ao sistema operacional. Esta instrução não tem operando. Os oito bits correspondentes ao operando são preenchidos com zeros.
Instrução 01; Formato {[0001] [endereço]}; Descrição: Executa um salto incondicional no fluxo do programa escrevendo o número de oito bits [endereço] no Ponteiro de Instruções, o que faz com que a próxima instrução a ser executada seja aquela contida na posição de memória cujo endereço é [endereço].
Instrução 02; Formato: {[0010] [endereço]}; Descrição: Executa um salto no fluxo do programa se o conteúdo do ACC for igual a zero escrevendo o número de oito bits [endereço] no Ponteiro de Instruções, o que faz com que a próxima instrução a ser executada seja aquela contida na posição de memória cujo endereço é [endereço]. Se o conteúdo do ACC não for igual a zero a instrução é ignorada e o fluxo do programa não será alterado.
Instrução 03; Formato: {[0011] [endereço]}; Descrição: Executa um salto no fluxo do programa se o conteúdo do ACC for maior que zero (positivo) escrevendo o número de oito bits [endereço] no Ponteiro de Instruções, o que faz com que a próxima instrução a ser executada seja aquela contida na posição de memória cujo endereço é [endereço]. Se o conteúdo do ACC não for positivo (ou seja, se for igual a zero ou negativo) a instrução é ignorada e o fluxo do programa não será alterado.
Instrução 04; Formato: {[0100] [endereço]}; Descrição: Executa um salto no fluxo do programa se o conteúdo do ACC for menor que zero (negativo) escrevendo o número de oito bits [endereço] no Ponteiro de Instruções, o que faz com que a próxima instrução a ser executada seja aquela contida na posição de memória cujo endereço é [endereço]. Se o conteúdo do ACC não for negativo (ou seja, se for igual a zero ou positivo) a instrução é ignorada e o fluxo do programa não será alterado.
Observação: Sim, eu sei que o conteúdo do ACC não parece negativo. Mas pense um pouco: em um sistema numérico onde somente existem “zeros” e “uns” e não há vírgulas, pontos ou sinais, como exprimir um número relativo, ou seja, com “sinal”? Faça uma experiência com valores de quatro bits. Pegue como minuendo (aquilo de onde se vai diminuir) o valor zero (0000b) e como subtraendo (aquilo que será subtraído) o valor um (0001b), ambos expressos em quatro bits. Ora, subtrair “um” de “zero” resulta em “menos um” seja qual for o sistema numérico empregado. INSTRUÇÕES DE ENTRADA/SAÍDA: Instruções que movem dados entre o Acumulador (ACC) e o mundo exterior através das unidades de entrada e saída (não necessitam de operandos). Instrução 05; Formato: {[0101 00000000]}; Descrição: Lê um valor no dispositivo de entrada padrão (teclado ou qualquer outro dispositivo de entrada) e o escreve no ACC. Qualquer outro valor eventualmente contido no ACC será sobrescrito. Enquanto não houver um valor na entrada padrão o programa permanece aguardando a entrada de dados pelo usuário. Esta instrução não tem operando. Os oito bits correspondentes ao operando são preenchidos com zeros.
Instrução 06; Formato: {[0110 00000000]}; Descrição: Lê o conteúdo do ACC e o envia para a saída padrão (impressora ou vídeo). O conteúdo do ACC permanece inalterado. Esta instrução não tem operando. Os oito bits correspondentes ao operando são preenchidos com zeros.
INSTRUÇÕES DE MOVIMENTAÇÃO DE DADOS: Instruções que movimentam um valor da posição de memória cujo endereço é [endereço] para o Acumulador (ACC) e vice-versa (cujo operando é um ponteiro, ou endereço da posição de memória que contém o valor) ou que carregam um valor constante no acumulador (cujo operando é o valor a ser carregado). Instrução 07; Formato: {[0111] [valor]}; Descrição: Escreve o número de oito bits [valor] no ACC. Qualquer outro valor eventualmente contido no ACC será sobrescrito. [valor] será um número expresso em binário de oito bits.
Instrução 08; Formato: {[1000] [endereço]}; Descrição: Lê o valor contido na posição de memória cujo endereço é o número de oito bits [endereço] e o escreve no ACC. O conteúdo da posição de memória cujo endereço é [endereço] permanece inalterado. Qualquer outro valor eventualmente contido no ACC será sobrescrito.
Instrução 09; Formato: {[1001] [endereço]}; Descrição: Lê o valor contido no ACC e o escreve na posição de memória cujo endereço é o número de oito bits [endereço]. O conteúdo de ACC permanece inalterado. Qualquer outro valor eventualmente contido na posição de memória cujo endereço é [endereço] será sobrescrito.
Hoje, paramos por aqui que a coluna já está suficientemente longa. Na próxima completaremos nosso conjunto de instruções (só faltam seis, as matemáticas e lógicas) e veremos como ele pode ser usado para criar um programa que, apesar de limitado, pode fazer algo de útil. Até lá. B. Piropo |