O set de instruções do computador de 8 bits

Fala pessoal, tudo beleza?

Hoje trataremos do set de instruções inicial do computador de 8 bits. Digo que ele é inicial pois, posteriormente, pretendo implementar mais algumas instruções para que o computador seja capaz de executar programas um pouco mais elaborados (com novas instruções de jump, por exemplo).

Como sabemos, toda instrução à ser executada por um computador passa por duas etapas, ou melhor, por dois ciclos: o ciclo de busca e o ciclo de execução.

Estas etapas recebem o nome de "ciclo" por estarem intimamente relacionadas aos ciclos de clock do sistema.

No nosso caso, a execução de uma instrução gasta 5 ciclos de clock, indo do /T0 ao /T4 (todos eles sendo disparados na borda de descida do clock - por isso a barra à frente da indicação de cada ciclo) e os bits de controle são todos disparados no contra-clock, ou seja, são disparados utilizando o sinal de clock invertido. Entretanto, convém lembrar que todos os circuitos implementados no nosso computador são atualizados (ou tem seu valor atualizado) na borda de subida do clock. Ou seja, acionamos os bits de controle na borda de descida mas o valor em si, só é gravado no registrador envolvido na operação na borda de subida.

O ciclo de busca acontece nos ciclos de clock /T0 e /T1. É neste ciclo que o computador busca a instrução à ser executada. Os registradores envolvidos nesta etapa são o Program Counter (PC), o Memory Register Address (MAR), a Random Access Memory (RAM) e o Instruction Register (IR). O funcionamento, em cada ciclo de busca é o seguinte:
  • Em /T0, aciona-se PC_OUT e MAR_IN;
  • Em /T1, aciona-se RAM_OUT, IR_IN e PC_INC. Com isso, ao fim de /T1, temos o OPCODE da instrução gravado no IR e o PC incrementado.
O ciclo de execução acontece nos ciclos de clock /T2, /T3 e /T4 e a duração da execução depende da instrução pois acionaremos bits de controle específicos de cada um dos circuitos envolvidos na operação (por exemplo, controlamos os bits de configuração da ALU - ALU0 e ALU1).

A imagem abaixo resume bem todo esse processo:

 Fonte: Computer Science Wiki (https://computersciencewiki.org)

Outro fator importante que devemos ter em mente quando estamos estudando um set de instruções é o ciclo de máquina (Machine Cycle - MC). Este fator trata do tempo que o computador leva para executar, de fato, uma instrução.

Este tempo pode ser calculado da seguinte forma (o resultado é obtido em segundos):

MC =     5       (total de ciclos de clock)
     --------
      fClock     (frequencia do clock)


Abaixo está a lista das instruções que inicialmente implementaremos no computador de 8 bits. O número binário que segue o nome é o OPCODE da instrução.
  • NOP (0000): não realiza nenhuma operação. É usada para gastar ciclos de máquina (em rotinas de delay, por exemplo);
  • LDA (0001): carrega o registrador acumulador (ACC), com 8 bits, por endereçamento indireto. Ou seja, move-se o valor armazenado em um endereço para o ACC. O valor que será armazenado em ACC será de 4 bits, visto que os outros 4 bits do byte são relativos ao endereço de origem do valor;
  • LDI (0010): carrega o ACC por endereçamento imediato (com 4 bits oriundos do OPERANDO da instrução);
  • STA (0011): armazena o conteúdo do ACC em um endereço da memória RAM;
  • ADD (0100): soma o conteúdo do ACC com o conteúdo da posição de memória apontada pelo OPERANDO da instrução. Este conteúdo de memória é salvo do registrador B e o resultado da soma é salvo novamente em ACC);
  • SUB (0101): idem à instrução ADD porém, efetuando a subtração dos valores;
  • AND (0110): idem à instrução ADD porém, efetuando a operação E lógico (AND), bit a bit com o valor armazenado no endereço;
  • ORL (0111): idem à instrução ADD porém, efetuando a operação OU lógico (OR), bit a bit com o valor armazenado no endereço;
  • XOR (0111): idem à instrução ADD porém, efetuando a operação OU-EXCLUSIVO (XOR), bit a bit com o valor armazenado no endereço;
  • NOT (1001): realiza a operação lógica NOT, bit a bit, no ACC e salva o resultado no próprio ACC;
  • JMP (1010): faz um desvio incondicional para o endereço de memória contido no OPERANDO da instrução (esta instrução é utilizada para fazer loops nos programas);
  • OUT (1110): envia o conteúdo do ACC para o registrador de saída (Output Register - OPR). Esta instrução, apesar de simples, é uma das mais importantes no computador de 8 bits pois é a responsável por exibir as mensagens (futuramente ;) e os resultados das operações realizadas pelo computador;
  • HLT (1111): desliga o sinal de clock e, com isso, para o processamento do computador. Muito utilizada para debug e para segurança.
Estas são as 13 instruções iniciais que implementaremos no computador de 8 bits. Veja que, futuramente, podemos incluir mais 3 instruções no set, totalizando as 16 instruções que podemos ter com 4 bits de OPCODE.

Esse assunto vai ficar um pouco mais claro quando estivermos trabalhando na  unidade de controle do computador.

Então, é isso. Por hoje é só pessoal!

Na próxima, trataremos do circuito do contador de busca e execução. Não perca!

Forte abraço e bons estudos à todos!

Comentários

Postagens mais visitadas