Máquinas hipotéticas da Universidade Federal do Rio Grande do Sul

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Neander/Ahmes/Ramses/Cesar
Desenvolvedor Raul Fernando Weber
Taisy Silva Weber
Fábio Augusto Dal Castel (Versão Win32)
Versão estável 2.1 (2002)
Sistema operacional MS-DOS, MS-Windows, Linux (via wine)
Gênero(s) Máquina hipotética
Licença proprietária

Neander, Ahmes, Ramses e Cesar são ferramentas que simulam máquina hipotéticas escritas pelos professores da UFRGS Raul Fernando Weber e Taisy Silva Weber, com fins didáticos, para uso em disciplinas como Arquitetura de Computadores e Assembler. Atualmente, diversas universidades brasileiras utilizam estas ferramentas de ensino.

Neander[editar | editar código-fonte]

Características[editar | editar código-fonte]

  • Largura de dados e endereços de 8 bits
  • Dados representados em complemento a dois
  • 1 acumulador de 8 bits (AC)
  • 1 apontador de programa de 8 bits (PC)
  • 1 registrador de estado com 2 códigos de condição: negativo (N) e zero (Z)

Conjunto de instruções do Neander[editar | editar código-fonte]

Código em Hexa Instrução Descrição
00 NOP nenhuma operação
10 STA end MEM(end) ← AC
20 LDA end AC← MEM(end)
30 ADD end AC← MEM(end) + AC
40 OR end AC← MEM(end) OR AC
50 AND end AC← MEM(end) AND AC
60 NOT AC← NOT AC
80 JMP end PC← end
90 JN end IF N=1 THEN PC ← end
A0 JZ end IF Z=1 THEN PC ← end
F0 HLT término de execução - (halt)

Ahmes[editar | editar código-fonte]

Ahmes ou WAhmes(em sua versão Win32) é uma ferramenta que simula uma máquina hipotética, para possibilitar a implementação de rotinas aritméticas simples, como adição e subtração, e a programação de rotinas mais complexas como multiplicação e divisão. É compatível com o Neander, mas apresenta um conjunto maior de instruções para facilitar a execução de operações aritméticas.

Características[editar | editar código-fonte]

  • Largura de dados e endereços de 8 bits
  • Dados representados em complemento a dois
  • 1 acumulador de 8 bits (AC)
  • 1 apontador de programa de 8 bits (PC)
  • 1 registrador de estado com 5 códigos de condição: negativo (N), zero (Z), carry out (vai-um) (C), borrow out (empresta-um) (B) e overflow (estouro) (V).

Modos de endereçamento[editar | editar código-fonte]

O Ahmes possui um único modo de endereçamento: o modo direto. Neste modo, a palavra seguinte ao código da instrução contém, nas instruções de manipulação de dados, o endereço do operando. Nas instruções de desvio, o endereço contido na instrução corresponde ao endereço para onde o apontador de programa será endereçado.

Conjunto de instruções do Ahmes[editar | editar código-fonte]

Código Binário Instrução Descrição Comentário
0000 0000 NOP nenhuma operação nenhuma operação
0001 0000 STA end MEM(end) ← AC armazena acumulador no endereço de memória
0010 0000 LDA end AC← MEM(end) carrega acumulador com conteúdo da memória
0011 0000 ADD end AC← MEM(end) + AC soma acumulador com conteúdo da memória
0100 0000 OR end AC← MEM(end) OR AC operação 'ou' lógico
0101 0000 AND end AC← MEM(end) AND AC operação 'e' lógico
0110 0000 NOT AC← NOT AC complemento a 1
0111 0000 SUB end AC← MEM(end) - AC subtrai acumulador do conteúdo da memória
1000 0000 JMP end PC ← end desvio incondicional para o endereço
1001 0000 JN end IF N=1 THEN PC ← end desvio condicional se negativo
1001 0100 JP end IF N=0 THEN PC ← end desvio condicional se positivo
1001 1000 JV end IF V=1 THEN PC ← end desvio condicional se houve estouro
1001 1100 JNV end IF V=0 THEN PC ← end desvio condicional se não houve estouro
1010 0000 JZ end IF Z=1 THEN PC ← end desvio condicional se zero
1010 0100 JNZ end IF Z=0 THEN PC ← end desvio condicional se diferente de zero
1011 0000 JC end IF C=1 THEN PC ← end desvio condicional se foi-um
1011 0100 JNC end IF C=0 THEN PC ← end desvio condicional se não foi-um
1011 1000 JB end IF B=1 THEN PC ← end desvio condicional se emprestou-um
1011 1100 JNB end IF B=0 THEN PC ← end desvio condicional se não emprestou-um
1110 0000 SHR C←AC(0); AC(i-1)←AC(i); AC(7)← 0 deslocamento para direita
1110 0001 SHL C←AC(7); AC(i)←AC(i-1); AC(0)←0 deslocamento para esquerda
1110 0010 ROR C←AC(0); AC(i-1)←AC(i); AC(7)←C rotação para direita
1110 0011 ROL C←AC(7); AC(i)←AC(i-1); AC(0)←C rotação para esquerda
1111 0000 HLT parada término de execução

Ramses[editar | editar código-fonte]

Características[editar | editar código-fonte]

  • Quatro modos de endereçamento (direto, indireto, imediato e indexado)
  • Dois registradores de uso geral, RA e RB
  • Um registrador de índice, RX
  • Indicadores de carry, negativo e zero,
  • Instruções adicionais ao Neander e o Ahmes com chamada de subrotina, negação e deslocamento de bits, além de outras.

Conjunto de instruções do Ramses[editar | editar código-fonte]

Para se construir o código binário de uma instrução no Ramses, é preciso concatenar os bits relativos a uma operação, um registrador e um modo de endereçamento. Por exemplo, a instrução 00010000 (em binário), é uma instrução de armazenamento, usando o registrador RA, no modo de endereçamento direto. Caso se queira alterar o registrador de A para B, altera-se o registrador (5° e 6° bits) de 00 para 01. Neste caso, a instrução teria o código binário 00010100. Alterando, desta vez, o modo de endereçamento para indexado, por exemplo, o código da instrução resultaria em 00010111.

Operações[editar | editar código-fonte]

Código Instrução Descrição
0000 NOP nenhuma operação
0001 STR r end armazena registrador na memória
0010 LDR r end carrega registrador da memória
0011 ADD r end soma valor da memória ao registrador
0100 OR r end operação lógica 'ou' entre o registrador e o endereço. resultado vai para o registrador.
0101 AND r end operação lógica 'e' entre o registrador e o endereço. resultado vai para o registrador.
0110 NOT r complemento de 1 no registrador (inverte o valor dos bits)
0111 SUB r end subtrai valor da memória do registrador
1000 JMP end Desvio incondicional. PC← end.
1001 JN end desvio condicional se negativo, PC ← end
1010 JZ end desvio condicional se zero, PC ← end
1011 JC end desvio condicional se foi-um, PC ← end
1100 JSR end desvio para subrotina
1101 NEG r troca de sinal. Complemento de 2.
1110 SHR r deslocamento para a direita
1111 HLT término de execução - (halt)

Registradores[editar | editar código-fonte]

Código Descrição
00 Registrador RA
01 Registrador RB
10 Registrador RX - Registrador de Índice
11 Nenhum registrador

Modos de endereçamento[editar | editar código-fonte]

Código Descrição
00 direto
01 indireto
10 imediato
11 indexado

Bibliografia[editar | editar código-fonte]

  • Weber, Raul Fernando (1998). Fundamentos de Arquitetura de Computadores 2ª ed. Porto Alegre: Sagra Luzzato. 199 páginas. ISBN: 8524106352 


Ligações externas[editar | editar código-fonte]