[MAC323] exemplo código Emulador/Compilador
- Subject: [MAC323] exemplo código Emulador/Compilador
- From: Leonidas O Brandao <leo@ime.usp.br>
- Date: Wed, 2 Jul 2003 20:17:58 -0300 (EST)
Olá
Fiquei de mandar um exemplo para aqueles que estão fazendo o Emulador ou o
Compilador, para ajudar no entendimento do mesmo. Finalmente ele vai...
Alto nível: o que o Compilador iria processar
Exemplo 1:
le(x); entra = true;
le(y); soma = 0;
le(z); while (entra) {
w = x+y+z; le(x);
imprime(w) soma = soma + x;
if (x==0) entra=false;
}
imprime(soma);
Baixo nível: o que o Emulador receberia como programa
Exemplo 1: Exemplo 2:
799 99 <- leitura
798 98 <- leitura
797 97 <- leitura
099 AC <- c99
298 AC <- cAC + c98
297 AC <- cAC + c97
196 96 <- cAC
896 imprime c96
// cAC: conteúdo do AC
// cEE: cont. da gav. EE
Exercício: qual o código deste programa ?
entra = true;
soma = 0;
while (entra) {
le(x);
soma = soma + x;
if (x==0) entra=false;
}
imprime(soma);
Dica: para fazer o "while (EL) C1;", veja aqui um "pseudo-assembler"
// aqui calc. EL e resultado no AC
// se cAC <> 0, então verdadeiro
// se cAC == 0, então falso
if cAC>0 vá para Rverd
if -cAC>0 vá para Rverd
Rfalso: // para finalizar while
vá para Rfim
Rverd: // trata comandos sob while
C1
Rfim: // para "receber" final de while
traduzir isto para o baixo nível é fácil
Boa diversão,
Leônidas
--------------------------------------------------------------------------
Leônidas de Oliveira Brandão - Computer Science Dep. of IME-USP (Brazil)
leo@ime.usp.br - http://www.ime.usp.br/~leo - +55 (011) 3091 [6298 | 6135]
Interessado em Matemática? Visite o "iMatica": http://www.matematica.br