Apostila antiga - The Cyan Programming Language
Apostila antiga - The Cyan Programming Language
Apostila antiga - The Cyan Programming Language
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
CHAPTER 4. GERAÇÃO DE CÓDIGO 37<br />
goto v[i]<br />
Descrição: v é um ponteiro utilizado como vetor onde cada elemento do vetor é um endereço de uma<br />
instrução de programa (label). Esta instrução desvia a execução do programa para a posição v[i].<br />
push X<br />
Descrição: empilha X na pilha, o que seria equivalente em C++ a fazer sp[++t] = X.<br />
pop X<br />
Descrição: coloca o topo da pilha em X, decrementando t:<br />
X = sp[t--];<br />
call L<br />
Descrição: chama o procedimento do label L.<br />
call X<br />
Descrição: chama o procedimento cujo endereço está na variável X.<br />
ret<br />
Descrição: retorna do procedimento.<br />
mov a, b<br />
Descrição: copia b em a<br />
mov a, b[i]<br />
Descrição: copia b[i] em a, onde b[i] é uma indexação de um vetor<br />
mov b[i], a<br />
Descrição: copia a em b[i]<br />
mov a, -b<br />
Descrição: copia -b em a<br />
mov a, &b<br />
Descrição: copia o endereço de b em a. b deve ser uma variável. Se b for sp[2], por exemplo, esta<br />
instrução copiará sp + 2 em a.<br />
mov a, *b<br />
Descrição: copia em a o valor contido no endereço apontado por b.<br />
exit<br />
Descrição: termina a execução do programa e volta o controle ao sistema operacional.<br />
4.3 Geração de Código para S2<br />
Esta seção define como código em assembler deve ser gerado para programas em S2. Apresentamos a<br />
seguir as regras da gramática com o código que deve ser gerado para cada uma delas. Algumas regras<br />
não causam geração de código e, portanto, não são citadas. A geração de código não é descrita de<br />
maneira rigorosa pois isto está fora do escopo deste curso.<br />
1. Assignment ::= Id “=” Expression<br />
Se Expression for uma variável, como em<br />
a = b;