Máquinas hipotéticas da Universidade Federal do Rio Grande do Sul: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
m Página proposta para eliminação por consenso
Alterações conforme sugestões do Saturnalia0
Linha 16:
| website =
| }}
'''Neander''', '''Ahmes''', '''Ramses''' e '''Cesar''' são [[aplicativo|ferramentas]] que simulam [[máquina hipotética]]s 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.<ref>{{citar web|url=http://www.cceca.eng.ufba.br/cceca/programa%20de%20disciplinas/MATA48%20-%20Arquitetura%20de%20Computadores.pdf|publicado=UFBA|título=Componente curricular arquitetura de computadores - MATA48|ano=2012|acessodata=25 de março de 2019}}</ref><ref>{{citar web|título=SCE-703 Projeto e Implementação de Sistemas Embarcados I - PISE|publicado=USP|url=http://conteudo.icmc.usp.br/pessoas/fosorio/SCE703/Trabalho-Pratico-TP01.pdf|data=1-9-2008|acessodata=25 de março de 2019}}</ref><ref>{{citar web|url=http://www.inf.ufg.br/~fmc/arqcomp/ISA2.pdf|título=ISA – Parte II: Arquiteturas-Exemplo Simuladores e Máquinas Reais|publicado=UFG|autor=Fábio M. Costa|acessodata=25 de março de 2019}}</ref>
 
==Neander==
A máquina Neander como definida por Weber, é uma arquitetura rudimentar baseada em um acumulador, de caráter didático.<ref>{{citar web|url=https://dcc.ufrj.br/~gabriel/WEAC2006.pdf|título=NeanderWin - Um Simulador Didático para uma Arquitetura do Tipo Acumulador|autor=Borges, José Antonio S.; Silva, Gabriel P.|ano=2006|acessodata=25 de março de 2019|publicado=UFRGS}}</ref> O Neander também possui uma farta documentação disponível na Internet.
 
===Características===
Linha 27 ⟶ 28:
* 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===
 
{| class="wikitable" width="70%"
|-
!Código em Hexa
![[Instrução]]
!Descrição
|-
|00
|align="left"|NOP
|align="left"|nenhuma operação
|-
|10
|align="left"|STA end
|align="left"|MEM(end) ← AC
|-
|20
|align="left"|LDA end
|align="left"|AC← MEM(end)
|-
|30
|align="left"|ADD end
|align="left"|AC← MEM(end) + AC
|-
|40
|align="left"|OR end
|align="left"|AC← MEM(end) OR AC
|-
|50
|align="left"|AND end
|align="left"|AC← MEM(end) AND AC
|-
|60
|align="left"|NOT
|align="left"|AC← NOT AC
|-
|80
|align="left"|JMP end
|align="left"|PC← end
|-
|90
|align="left"|JN end
|align="left"|IF N=1 THEN PC ← end
|-
|A0
|align="left"|JZ end
|align="left"|IF Z=1 THEN PC ← end
|-
|F0
|align="left"|HLT
|align="left"|término de execução - (halt)
|-
|}
 
==Ahmes==
Linha 91 ⟶ 38:
* 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===
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===
{| class="wikitable" width="80%"
|-
!Código Binário
![[Instrução]]
!Descrição
!Comentário
|-
|0000 0000
|align="left"|NOP
|align="left"|nenhuma operação
|align="left"|nenhuma operação
|-
|0001 0000
|align="left"|STA end
|align="left"|MEM(end) ← AC
|align="left"|armazena acumulador no endereço de memória
|-
|0010 0000
|align="left"|LDA end
|align="left"|AC← MEM(end)
|align="left"|carrega acumulador com conteúdo da memória
|-
|0011 0000
|align="left"|ADD end
|align="left"|AC← MEM(end) + AC
|align="left"|soma acumulador com conteúdo da memória
|-
|0100 0000
|align="left"|OR end
|align="left"|AC← MEM(end) OR AC
|align="left"|operação 'ou' lógico
|-
|0101 0000
|align="left"|AND end
|align="left"|AC← MEM(end) AND AC
|align="left"|operação 'e' lógico
|-
|0110 0000
|align="left"|NOT
|align="left"|AC← NOT AC
|align="left"|complemento a 1
|-
|0111 0000
|align="left"|SUB end
|align="left"|AC← MEM(end) - AC
|align="left"|subtrai acumulador do conteúdo da memória
|-
|1000 0000
|align="left"|JMP end
|align="left"|PC ← end
|align="left"|desvio incondicional para o endereço
|-
|1001 0000
|align="left"|JN end
|align="left"|IF N=1 THEN PC ← end
|align="left"|desvio condicional se negativo
|-
|1001 0100
|align="left"|JP end
|align="left"|IF N=0 THEN PC ← end
|align="left"|desvio condicional se positivo
|-
|1001 1000
|align="left"|JV end
|align="left"|IF V=1 THEN PC ← end
|align="left"|desvio condicional se houve estouro
|-
|1001 1100
|align="left"|JNV end
|align="left"|IF V=0 THEN PC ← end
|align="left"|desvio condicional se não houve estouro
|-
|1010 0000
|align="left"|JZ end
|align="left"|IF Z=1 THEN PC ← end
|align="left"|desvio condicional se zero
|-
|1010 0100
|align="left"|JNZ end
|align="left"|IF Z=0 THEN PC ← end
|align="left"|desvio condicional se diferente de zero
|-
|1011 0000
|align="left"|JC end
|align="left"|IF C=1 THEN PC ← end
|align="left"|desvio condicional se foi-um
|-
|1011 0100
|align="left"|JNC end
|align="left"|IF C=0 THEN PC ← end
|align="left"|desvio condicional se não foi-um
|-
|1011 1000
|align="left"|JB end
|align="left"|IF B=1 THEN PC ← end
|align="left"|desvio condicional se emprestou-um
|-
|1011 1100
|align="left"|JNB end
|align="left"|IF B=0 THEN PC ← end
|align="left"|desvio condicional se não emprestou-um
|-
|1110 0000
|align="left"|SHR
|align="left"|C←AC(0); AC(i-1)←AC(i); AC(7)← 0
|align="left"|deslocamento para direita
|-
|1110 0001
|align="left"|SHL
|align="left"|C←AC(7); AC(i)←AC(i-1); AC(0)←0
|align="left"|deslocamento para esquerda
|-
|1110 0010
|align="left"|ROR
|align="left"|C←AC(0); AC(i-1)←AC(i); AC(7)←C
|align="left"|rotação para direita
|-
|1110 0011
|align="left"|ROL
|align="left"|C←AC(7); AC(i)←AC(i-1); AC(0)←C
|align="left"|rotação para esquerda
|-
|1111 0000
|align="left"|HLT
|align="left"|parada
|align="left"|término de execução
|-
|}
 
==Ramses==
 
===Características===
 
* Quatro modos de endereçamento (direto, indireto, imediato e indexado)
* Dois registradores de uso geral, RA e RB
Linha 235 ⟶ 47:
* Instruções adicionais ao Neander e o Ahmes com chamada de subrotina, negação e deslocamento de bits, além de outras.
 
==Cesar==
===Conjunto de instruções do Ramses===
===Características===
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
* Largura de dados e de endereços de 16 bits
 
* Dados representados em complemento de dois
o binário 00010100. Alterando, desta vez, o modo de endereçamento para indexado, por exemplo, o código da instrução resultaria em 00010111.
* Processamento de pilha
 
* 8 modos de endereçamento nativos + 4 modos de endereçamento derivados
====Operações====
* 8 registradores de 16 bits
{| class="wikitable" width="70%"
* 6 registradores de uso geral
|-
* 1 apontador de programa (program counter)
![[Código]]
* 1 apontador de pilha (stack pointer)
!Instrução
* 1 registrador de estado com 4 códigos de condição: negativo, zero, carry e overflow
!Descrição
* 2 periféricos: teclado e visor de 26 caracteres
|-
|align="left"|0000
|align="left"|NOP
|align="left"|nenhuma operação
|-
|align="left"|0001
|align="left"|STR r end
|align="left"|armazena registrador na memória
|-
|align="left"|0010
|align="left"|LDR r end
|align="left"|carrega registrador da memória
|-
|align="left"|0011
|align="left"|ADD r end
|align="left"|soma valor da memória ao registrador
|-
|align="left"|0100
|align="left"|OR r end
|align="left"|operação lógica 'ou' entre o registrador e o endereço. resultado vai para o registrador.
|-
|align="left"|0101
|align="left"|AND r end
|align="left"|operação lógica 'e' entre o registrador e o endereço. resultado vai para o registrador.
|-
|align="left"|0110
|align="left"|NOT r
|align="left"|complemento de 1 no registrador (inverte o valor dos bits)
|-
|align="left"|0111
|align="left"|SUB r end
|align="left"|subtrai valor da memória do registrador
|-
|align="left"|1000
|align="left"|JMP end
|align="left"|Desvio incondicional. PC← end.
|-
|align="left"|1001
|align="left"|JN end
|align="left"|desvio condicional se negativo, PC ← end
|-
|align="left"|1010
|align="left"|JZ end
|align="left"|desvio condicional se zero, PC ← end
|-
|align="left"|1011
|align="left"|JC end
|align="left"|desvio condicional se foi-um, PC ← end
|-
|align="left"|1100
|align="left"|JSR end
|align="left"|desvio para subrotina
|-
|align="left"|1101
|align="left"|NEG r
|align="left"|troca de sinal. Complemento de 2.
|-
|align="left"|1110
|align="left"|SHR r
|align="left"|deslocamento para a direita
|-
|align="left"|1111
|align="left"|HLT
|align="left"|término de execução - (halt)
|-
|}
 
====Registradores====
{| class="wikitable" width="30%"
|-
![[Código]]
!Descrição
|-
|00
|align="left"|Registrador RA
|-
|01
|align="left"|Registrador RB
|-
|10
|align="left"|Registrador RX - Registrador de Índice
|-
|11
|align="left"|Nenhum registrador
|-
|}
 
====Modos de endereçamento====
{| class="wikitable" width="20%"
|-
![[Código]]
!Descrição
|-
|00
|align="left"|direto
|-
|01
|align="left"|indireto
|-
|10
|align="left"|imediato
|-
|11
|align="left"|indexado
|-
|}
 
==Bibliografia==
* {{citar livro|autor=Weber, Raul Fernando|título=Fundamentos de Arquitetura de Computadores|subtítulo=|idioma=|edição=2ª|local=Porto Alegre|editora=Sagra Luzzato|ano=1998|páginas=199|volume=|isbn=: 8524106352}}
* {{citar livro|autor=Gabriel Luis Duarte Pittol|título=As consequências socio-economicas dos jogos de computador na sociedade|subtítulo=|idioma=Português|edição=1ª|local=Porto Alegre|editora=UFRGS|ano=2019|páginas=11|volume=|isbn=: 8524106353}}
 
 
==Ligações externas==
Linha 368 ⟶ 74:
*[http://www.inf.ufg.br/~fmc/orgcomp/OrgNeander.odp Organização do Neander - Universidade Federal de Goiás]
*[http://www.inf.ufg.br/~eduardo/arq/isa2.pdf Material de aula de Arquitetura de Computadores sobre o Neander, Ahmes, Ramses e Cesar - Universidade Federal de Goiás]
 
{{Referências}}
 
[[Categoria:Programas_de_computador_educativos]]