O Computador CM16/22

Esta página descreve a arquitetura do computador CM16/22, uma máquina hipotética usada como exemplo durante o oferecimento da discipina Computação I (CCM0118) para a turma 22 do Curso de Ciências Moleculares da USP. Embora o CM16/22 seja um computador totalmente imaginário, sua arquitetura é muito semelhante à dos microcomputadores da década de 1980. Por ser bem mais simples que os computadores atuais, mas possuir as características essenciais dos microprocessadores empregados nas máquinas atuais, o CM16/22 ilustra de modo realista os conceitos da arquitetura de Von Neumann.

Registradores internos e memória principal

O CM16/22 é um computador de 16 bits. Sua CPU tem 8 registradores de propósito geral, denominados r0, r1, ..., r7, cada um deles com 16 bits. No contexto do CM16/22, o termo palavra (word) denota um agrupamento de 16 bits, isto é, uma sequência cujos elementos são dígitos binários e cujo comprimento é 16. Se considerarmos uma palavra como um número inteiro não negativo, a palavra é um valor hexadecimal no intervalo de 0000 a FFFF. Com essa terminologia, podemos dizer que cada um dos registradores r0, r1, ..., r7 contém uma palavra.

Assim como a quase totalidade das máquinas atuais, o CM16/22 tem sua memória principal dividida em células de 8 bits (1 célula = 1 byte). Cada célula da memória tem um endereço e um conteúdo. O conteúdo é o byte armazenado na célula. O endereço é um número inteiro não negativo, representável por uma palavra de 16 bits. Como os endereços têm 16 bits, o número máximo de células é 216 = 26 * 210 = 64 * 1024 = 65536. Em outras palavras, a memória principal do CM16/22 tem no máximo 64 Kbytes. Vamos supor que esse máximo é atingido: trabalharemos com uma máquina imaginária com 64 Kbytes de memória, com endereços no intervalo de 0000 a FFFF.

Além dos oito registradores de propósito geral, o CM16/22 tem

A cada instante os registradores de instrução contêm a instrução que está sendo executada pela CPU naquele instante. Como o programa em execução reside na memória principal, o que os registradores de instrução contêm é uma cópia de uma das instruções residentes na memória principal — a instrução que a CPU estiver executando no momento. Já o apontador de instruções contém o endereço da próxima instrução a ser executada. Finalmente, o registrador de flags guarda informações sobre o resultado de uma operação aritmética ou lógica efetuada previamente. A versão atual do CM16/22 usa apenas dois dos 16 bits do registrador de flags: o bit na extremidade direita desse registrador, denominado zf (zero flag), e o bit imediatamente anterior (o penúltimo da esquerda para a direita), denominado cf (carry flag). Esses bits têm o seguinte significado:

Formato das instruções

As instruções do CM16/22 têm comprimento variável. Há instruções de 1 byte, instruções de 2 bytes e instruções de 3 bytes. Os dois bits mais significativos (mais à esquerda) do primeiro byte de uma instrução determinam o número de bytes e o formato da instrução. Há quatro formatos, descritos a seguir. Esses formatos comportam instruções com zero, um ou dois parâmetros. O CM16/22 não tem instruções com três ou mais parâmetros. Uma operação como "some os valores de x e y e guarde o resultado em z" (z ← x + y), que precisaria dos três parâmetros x, y e z, não existe no conjunto de instruções do CM16/22. O que há são instruções como "some os conteúdos dos registradores ri e rj e guarde o resultado em ri" (ri ← ri + rj), que toma apenas dois parâmetros — os registradores ri e rj.

Conjunto de instruções

Exemplos de programas para o CM16/22

Examine as listagens desses três programas e observe a correspondência entre as instruções em linguagem de montagem (a parte central de cada listagem), os endereços de memória (a coluna da listagem que fica mais à esquerda) e as instruções na linguagem de máquina (que também aparecem na parte esquerda da listagem, logo depois dos endereços). Observe também a correspondência entre as instruções do CM16/22 e os comandos numa linguagem de alto nível, que foram incluídos como comentários no programa em linguagem de montagem (parte direita da listagem).


Valid CSS! Valid XHTML 1.0 Transitional Last modified: Thu Nov 10 02:30:53 BRST 2011
Francisco Reverbel