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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CHAPTER 4. GERAÇÃO DE CÓDIGO 41<br />

L2:<br />

goto L1<br />

Contudo, existe uma forma mais eficiente:<br />

goto L1<br />

L2: codigo para S<br />

L1: cmp i, n<br />

goto< L2<br />

A cada passo do laço, na primeira forma há um “goto L1” e um “goto>= L2” que falha. 1 Na<br />

segunda forma, a cada passo do laço há apenas um “goto< L2” que sucede. Mesmo havendo um<br />

“goto L1” no início da segunda forma, esta é mais eficiente do que a primeira.<br />

4.4 Geração de Código para Vetores e Comando case/switch<br />

Geração de Código para Vetores<br />

Suponha que S2 suporte vetores unidimensionais declarados como<br />

var v : array(integer)[100];<br />

e que podem ser indexados como em C++:<br />

a = v[i]; // 1<br />

v[i] = a; // 2<br />

Estas instruções serão traduzidas para<br />

mov a, v[i] // 1<br />

mov v[i], a // 2<br />

em assembler. Se a instrução mov não admitisse a indexação de seus operandos, o endereço de v[i]<br />

teria que ser calculado previamente. Nesta situação, a instrução 1 seria traduzida para<br />

mov t1, &v<br />

add t1, i<br />

mov a, *t1<br />

onde t1 é uma variável temporária. No caso geral, o endereço t1 do i-ésimo elemento do vetor é<br />

calculado como<br />

t1 = &v + i*sizeof(v[0])<br />

considerando que a memória é indexada byte a byte. Na máquina que estamos utilizando, a memória<br />

é indexada de dois em dois bytes. Isto é, o endereço t1 representa dois bytes, suficientes para um<br />

inteiro e t1 + 1 também representa dois bytes. Assim, o endereço do i-ésimo elemento do vetor v é<br />

t1 = &v + i;<br />

Geração de Código para o Comando case/switch<br />

Suponha que tenha sido acrescentado a S2 um comando case da forma<br />

1 Este desvio condicional sucederá apenas quando o laço for terminar.

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

Saved successfully!

Ooh no, something went wrong!