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 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