O projeto atualmente consiste de duas partes, na forma de applets Java :
Abaixo seguem as descrições detalhadas das duas partes:
(baseado em http://www.ime.usp.br/~leo/mac323/03-1/tarefas.html)
Emula um computador simplificado de 12 instruções (10 comuns e 2
extensões) e 100 posições de memória.
Cada uma das posições de memória contém até 6 caracteres.
Quando o conteúdo de uma posição de memória representa uma
instrução (comum), só serão considerados os 3 primeiros, sendo o
primeiro o número da instrução e os 2 restantes um complemento
(geralmente um endereço de memória; de agora em diante o
chamaremos de EE).
Quando representar um valor numérico, este estará entre -99999 e
999999.
Instruções Comuns
0 AC <- cEE (se EE<>00, senão final de progr.) | Legenda:
1 EE <- cAC | AC = ACumulador
2 AC <- cAC + cEE | EE = complemento da instrução
3 AC <- cAC - cEE | (geralmente um Endereço)
4 AC <- cAC * cEE | c_ = 'conteúdo do'
5 AC <- cAC / cEE | EPI = Endereço da Próxima
6 se cAC>0 então EPI <- EE | Instrução
7 EE <- leitura teclado |
8 saída cEE |
9 EPI <- EE (desvio incondicional) |
Instruções Extras
0-0000 Final de programa
0-xxxx AC <- xxxx
1-xxxx EE <- xxxx [TO DO: ISSO AQUI NÃO ESTÁ BEM DEFINIDO]
Exemplo de código fonte, acompanhado de um código equivalente para o emulador
le ( x ) ; le ( y ) ; le ( z ) ; w = x + y + z ; imprime ( w ) ;
799 798 797 099 298 297 109 809
O compilador recebe um programa escrito em uma linguagem
simplificada, e gera o código correspondente para o emulador
descrito acima.
Essa linguagem, baseada em C, possui os seguintes elementos:
Expressões Aritméticas: envolvendo '+','-','*' e '/'
Expressões Lógicas: envolvendo operadores
- lógicos ( '&&' = E, '||' = OU e '!' = NÃO )
- relacionais ( '<', '>', '<=', '>=', '==', '!=' )
Atribuição: "variavel = expressão"
Comando de seleção (if) : " if ( expr_lógica ) comando ; ", ou
" if ( expr_lógica ) comando1 ; else comando2 ; "
Comando de repetição (while) : " while ( expr_lógica ) comando ; ", ou
" while ( expr_lógica ) { comando1 ; ...; comandoN } "
Comando simplificado de leitura (le): " le ( var1 , var2 , ... ) ; "
Comando simplificado de escrita (imprime): " imprime ( var1 , var2 , ... ) ; "
Atualmente os applets estão em estágio final de
desenvolvimento, mas serão colocados aqui assim que estiverem
concluídos. Por isso aqui só estão disponíveis as versões de
demonstração deles.
[Não há applet de demonstração disponível]
O objetivo principal é mostrar ao aluno como um programa é
executado pelo computador, de maneira semelhante às aulas
introdutórias da disciplina "MAC110 - Introdução à Computação"
do IME/USP.
Além disso, o aluno aprende a "pensar" através do paradigma de
programação imperativa, pois ele vê as mudanças no estado
do programa (suas variáveis) causadas pelas instruções.
Ainda há a possibilidade de se unir essas duas partes do projeto
para a criação de um simulador da execução direta do código
fonte. Para um aluno, tal simulador poderia ser mais útil ao
longo das aulas do semestre, pois ele não deveria lidar com
programação em baixo nível durante um curso introdutório.