O código do simulador (versão alfa) pode ser baixado aqui.
Um pequeno tutorial sobre como projetar uma arquitetura usando este simulador pode ser lido no link "Projetando uma Arquitetura" abaixo.
Para conseguir usar satisfatoriamente o simulador há um pré-requisito inapelável: conhecer programação orientada a objetos.
Apresentações (formado Open Document)
PROJETO
Criar a organização de uma arquitetura e um assembly funcional para a arquitetura.
As arquiteturas disponíveis para escolha são uma das três abaixo.
Assembly.
Por haver mais de um registrador, estes devem ser identificados pelo símbolo %. Por exemplo move %RPG0 %RPG1. Os valores imediatos (constantes) são números simples.
Assembly 1
add %<regA> %<regB> || RegB <- RegA + RegB
add <mem> %<regA> || RegA <- memória[mem] + RegA
add %<regA> <mem> || Memória[mem] <- RegA + memória[mem]
add imm %<regA> || RegA <- imm + RegA
sub <regA> <regB> || RegB <- RegA - RegB
sub <mem> %<regA> || RegA <- memória[mem] - RegA
sub %<regA> <mem> || memória[mem] <- RegA - memória[mem]
sub imm %<regA> || RegA <- imm - RegA
imul <mem> %<RegA> || RegA <- RegA x memória[mem] (produto de inteiros)
imul %<RegA> <mem> || memória[mem] <- RegA x memória[mem] (idem)
imul %<RegA> <RegB> || RegB <- RegA x RegB (idem)
move <mem> %<regA> || RegA <- memória[mem]
move %<regA> <mem> || memória[mem] <- RegA
move %<regA> %<regB> || RegB <- RegA
move imm %<regA> || RegA <- immediate
inc %<regA> || RegA ++
jmp <mem> || PC <- mem (desvio incondicional)
jn <mem> || se última operação<0 então PC <- mem (desvio condicional)
jz <mem> || se última operação=0 então PC <- mem (desvio condicional)
jeq %<regA> %<regB> <mem> || se RegA==RegB então PC <- mem (desvio condicional)
jneq %<regA> %<regB> <mem> || se RegA!=RegB então PC <- mem (desvio condiciona
jgt %<regA> %<regB> <mem> || se RegA>RegB então PC <- mem (desvio condicional)
jlw %<regA> %<regB> <mem> || se RegA<RegB então PC <- mem (desvio condicional)
Assembly 2
add %<regA> %<regB> || RegB <- RegA + RegB
add <mem> %<regA> || RegA <- memória[mem] + RegA
add %<regA> <mem> || Memória[mem] <- RegA + memória[mem]
sub <regA> <regB> || RegB <- RegA - RegB
sub <mem> %<regA> || RegA <- memória[mem] - RegA
sub %<regA> <mem> || memória[mem] <- RegA - memória[mem]
imul <mem> %<RegA> || RegA <- RegA x memória[mem] (produto de inteiros)
imul %<RegA> <mem> || memória[mem] <- RegA x memória[mem] (idem)
imul %<RegA> <RegB> || RegB <- RegA x RegB (idem)
move <mem> %<regA> || RegA <- memória[mem]
move %<regA> <mem> || memória[mem] <- RegA
move %<regA> %<regB> || RegB <- RegA
move imm %<regA> || RegA <- immediate
inc %<regA> || RegA ++
inc <mem> || memória[mem] ++
jmp <mem> || PC <- mem (desvio incondicional)
jn <mem> || se última operação<0 então PC <- mem (desvio condicional)
jz <mem> || se última operação=0 então PC <- mem (desvio condicional)
jnz <mem> || se última operação|=0 então PC <- mem (desvio condicional)
jeq %<regA> %<regB> <mem> || se RegA==RegB então PC <- mem (desvio condicional)
jgt %<regA> %<regB> <mem> || se RegA>RegB então PC <- mem (desvio condicional)
jlw %<regA> %<regB> <mem> || se RegA<RegB então PC <- mem (desvio condicional)
NOTA: A ULA não possui operação de multiplicação. Com isso as operações imul deverão ser implementadas utilizando-se um trecho de memória (previamente reservada pela própria arquitetura), onde residirá um pequeno microprograma que executa um laço de execução. Lembrem de salvar os valores dos registradores antes de executar o imul, e de restaurá-los depois. Reserve posições de memória pra isso também.
O projeto da disciplina consiste em projetar diferentes arquiteturas de computadores, considerando os aspectos de sua organização, conforme descrito no material da disciplina.
Cada equipe vai solicitar uma arquitetura diferente para projetar (arquitetura 1, 2 ou 3), além de uma linguagem assembly (1 ou 2).
Note que, idealmente, carda par (arquitetura/assembly) não se repetirá. Assim, quem solicitar primeiro terá preferência.
As equipes devem entregar o projeto funcionando plenamente: a linguagem executando perfeitamente sobre a arquitetura considerada descrita com exatidão.
Equipes de no mínimo UMA e no máximo CINCO pessoas.
Equipes espontâneas: enviem email com os nomes dos componentes para degas at uesc dot br até a meia-noite do dia 16/05/2023.
Equipes compulsórias: os nomes que não estiverem listado em alguma equipe espontânea serão colocados em equipes formadas compulsoriamente.
-----------------------------------------------------------------------------------------------------
"Degas! Minha equipe me abandonou! O que eu faço?"
Se isto acontecer, foi por um dos dois motivos: ou você escolheu mal seus colegas de equipe, espontaneamente, ou então você não quis escolher seus colegas de equipe.
Em qualquer desses casos culpa é sua, não minha.
Deal with it.
EQUIPES FORMADAS
DANIEL LAGO NANO E SILVA
HENIO PEDRO SILVA SANTANA
THALLES CERQUEIRA SANTOS
VÍTOR PIRES ROCHA
GUSTAVO ARAGÃO OLIVEIRA
LUIZ FELIPE DO ROSÁRIO ALVES SILVA
PEDRO AFFONSO SILVA MARQUES
BRENDA CASTRO DA SILVA
GABRIEL CARVALHO DOS SANTOS
KAUAN SOUZA TELES
MYCHAEL ANTONIO MATOS DOS SANTOS
LEONAM SOUSA RABELO
Luciana Roncarati dos Santos
FLAVIA ALESSANDRA SANTOS DE JESUS
BRUNO SANTOS COSTA
TAINAH BOMFIM MARQUES
EDUARDO TAKESHI WATANABE
HERBERT ANDRADE NASCIMENTO
VITOR COUTINHO LIMA
MARCOS ANTONIO MEIRA AGUIAR