segunda-feira, janeiro 19, 2009

Simulando um Computador - 2/4

Nesta segunda parte vamos descrever o computador hipotético COMP.

A Arquitetura do Comp

Como já dito, o COMP é extremamente simples. Ele trabalha sobre números decimais de 4 dígitos (sem sinal) e é composto por:
  • um acumulador (AC), utilizado para cálculos;
  • um indicador de sobrecarga (C) que indica quando o resultado de uma operação não cabe no acumulador;
  • um contador de programa (CP) que indica qual posição de memória contem que contém a próxima instrução a ser executada;
  • uma memória com 100 posições, referenciadas por endereços de dois dígitos decimais (00 a 99);
  • um dispositivo de entrada (teclado); e
  • um dispositivo de saída (vídeo).
As Instruções do COMP

As instruções do COMP são codificadas em números de quatro dígitos com o formato IOMM.

O dígito O é o código da operação. A tabela abaixo descreve as operações disponíveis. E indica o endereço do operando e (E) o valor do operando. x <- y indica armazenar o valor y na posição apontada por x.
I e MM indicam o operando a ser utilizado pela instrução:
  • I = 0 endereçamento direto. MM é o endereço do operando a ser usado pela instrução;
  • I = 1 endereçamento indireto. A posição de endereço MM contém (nos dois dígitos menos significativos) o endereço do operando; e
  • I = 2 endereçamento imediato. MM é o próprio operando
A instrução STP não tem operando. As instruções STA, INP, BRN, BZR e BCY não permitem operando imediato.

Alguns exemplos de instrução, supondo que a posição 10 contém 0020 e a posição 20 contem 9901.
  • 0010 (AC <- 0020) Carrega no acumulador o valor na posição de endereço 10 (endereçamento direto).
  • 1010 (AC <- 9901) A posição de endereço 10 contém o endereço de onde será obtido o operando (endereçamento indireto).
  • 2010 (AC <- 0010) Carrega no acumulador o valor contido na própria instrução (endereçamento imediato).
  • 0020 (AC <- 9901), 2299 (AC <- 0000, C <- 1) Carrega 9901 no acumulador (endereçamento direto) e depois soma 99 (endereçamento imediato). Como o resultado (10000) não cabe no acumulador, o indicador de sobrecarga (C) é ligado para indicar o vai-um.
A Linguagem Assembly do COMP

Uma instrução do COMP é codificada em Assembler da seguinte forma:
  • mnemônico (três letras)
  • separador (zero ou mais espaços)
  • modo de endereçamento (* se indireto, $ se imediato, ausente se direto)
  • operando (um ou dois dígitos)
Re-escrevendo em assembler as três primeiras instruções do exemplo anterior:
LDA 10
LDA *10
LDA $10

Nenhum comentário: