19.04.2013 Views

Apostila antiga - The Cyan Programming Language

Apostila antiga - The Cyan Programming Language

Apostila antiga - The Cyan Programming Language

SHOW MORE
SHOW LESS

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;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!