Buscar

2ª Lista de Exercícios

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Universidade Federal Fluminense - UFF 
Departamento de Computação - RCM 
Instituto de Ciência e Tecnologia - ICT 
Professor: Eduardo Marques 
 
Lista de exercícios de Compiladores 
 
1) Responda: 
 
a) Quando se pode aplicar a otimização de eliminação de sub-expressão comum 
b) Qual o efeito que a quantidade de registradores tem no código gerado e por que. 
 
2) Transforme os códigos a seguir em código intermediário de 3 endereços 
 
 a) x := a+b 
 b) if (a<b) x:=a else x := b 
 c) while (x != y) x:=x*2 
 
3) Mostre como o código intermediário a seguir pode ser otimizado e justifique as 
otimizações. 
 
a) 
 
1 MOV a 0 
2 JGT a 10 5 
3 MOV x a 
4 JMP 6 
5 MOV x b 
6 RTN 
 
b) 
 
1 MOV x 0 
2 JGT x 10 7 
3 MULT t1 y A 
4 ADD t2 x t1 
5 MOV x t2 
6 JMP 2 
7 RTN 
 
c) 
 
1 MOV a 0 
2 MOV a p 
3 JGT 0 a 17 
4 DIV t1 a p 
5 JGT t1 0.5 9 
6 DIV t2 a p 
7 ADD t3 f t2 
8 MOV f t3 
9 DIV t4 a p 
10 JGT 0.5 t4 14 
11 DIV t5 a p 
12 SUB t6 f t5 
13 MOV f t6 
14 SUB t7 a 1 
15 MOV a t7 
16 JMP 3 
17 MOV p f 
 
As instruções utilizadas foram: 
 
MOV a b - copia o conteúdo de b para a 
JGT a b c – pula para a instrução na linha c se a maior que b 
JMP a – pula para a instrução na linha a 
RTN – retorna a chamada de uma função 
ADD a b c – soma b e c e copia o valor para a 
SUB a b c – subtrai b e c e copia o valor para a 
DIV a b c – divide b e c e copia o valor para a 
MULT a b c – multiplica b e c e copia o valor para a 
 
4) Indique qual o numero de registradores necessários para calcular as expressões a seguir 
 
a) (a+b)*(c-d) 
b) (a+(b-c))*((e-f)+(g-h)) 
c) ((a-b)*(c-d)+(e-f)*(g-h)) 
 
5) Qual o código final gerado para os códigos intermediários da questão 3 utilizando apenas 
2 registradores? Utilize as seguintes instruções: 
 
MOV R $n - move o valor n para o registrador R 
MOV R p - move o valor na posição de memória p para o registrador R 
MOV p R - move o valor no registrador R para a posição de memória p 
JGZ R1,R2 - pula para a instrução no registrador R2 se o valor e R1 for maior que zero 
JMP R - pula para a instrução no registrador R 
ADD R p - soma ao valor em R o valor na posição de memória p e guarda em R 
SUB R p - subtrai do valor em R o valor na posição de memória p e guarda em R 
MUL R p - multiplica o valor em R pelo valor na posição de memória p e guarda em R 
DIV R p - divide o valor em R pelo valor na posição de memória p e guarda em R 
RTN R - retorna para a instrução no registrador R

Outros materiais