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 36<br />

mov sp[0], 2<br />

mov sp[1], bp[2]<br />

Na tradução de S2 para assembler, utilizaremos apenas sp para manipular variáveis. As variáveis<br />

locais são alocadas na pilha nas posições sp[0], sp[1], sp[2], etc.<br />

Na declaração das variáveis do programa<br />

var a, b, c: integer;<br />

begin<br />

...<br />

end<br />

as variáveis a, b e c seriam referenciadas como sp[0], sp[1] e sp[2] no assembler. Contudo, utilizaremos<br />

os nomes a, b e c também no assembler, por uma questão de simplicidade.<br />

Detalhamos a seguir todas as instruções do assembler. Os identificadores a e b utilizados nos<br />

exemplos referem-se a variáveis do assembler ou a registradores.<br />

not a<br />

Descrição: !a<br />

add a, b<br />

Descrição: a = a + b<br />

sub a, b<br />

Descrição: a = a − b<br />

mult a, b<br />

Descrição: a = a ∗ b<br />

div a, b<br />

Descrição: a = a / b<br />

cmp a, b<br />

Descrição: compara a com b, inicializando o registrador cm com:<br />

• -1 se a < b;<br />

• 0 se a == b ou;<br />

• 1 se a > b.<br />

O registrador cm é inicializado por esta instrução e utilizada pelas instruções de desvio incondicional<br />

(goto>, etc). Ele não é manipulado diretamente pelo programador.<br />

goto> L, goto>= L, goto< L, goto L1<br />

a última instrução causará um desvio para L1 se X > 3.<br />

goto L<br />

Descrição: desvia para L

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

Saved successfully!

Ooh no, something went wrong!