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