Buscar

Geração de código de máquina - Compiladores - 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

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
Você viu 3, do total de 3 páginas

Prévia do material em texto

Geração de código de máquina - Compiladores
Exercícios
1. As linguagens de montagem são específicas para cada microprocessador e
intimamente ligadas à arquitetura do sistema. Com relação à maneira como o
compilador deve realizar a tradução para a linguagem de montagem, é correto
afirmar que:
Resposta correta.
B. Ao realizar a tradução da linguagem intermediária para a linguagem de montagem, o
resultado final deve permanecer o mesmo, apesar de a sequência de operações geradas
poder ser alterada.
As linguagens de montagem são específicas de cada microprocessador, uma vez
que estão ligadas à estrutura interna de cada dispositivo, com as suas limitações
específicas, como de tipos de dados.
A tradução da linguagem intermediária para a linguagem de montagem, é
realizada por meio de um algoritmo guloso, que realiza escolhas locais ótimas a
fim de aproximar a escolha global ótima. Existem casos, porém, em que é preciso
alterar a sequência das instruções de montagem, mantendo o resultado final
do algoritmo inalterado.
2. Para a criação de um código de montagem otimizado, para determinado
processador, existem processos que podem ser observados.
Quais são esses processos?
Resposta correta.
A. Escalonamento do código, em que partes do código de montagem são espaçadas de
forma a possibilitar o paralelismo do código.
Uma forma de otimizar o código de montagem se dá por meio do
escalonamento do código a fim de permitir a paralelização do código no
dispositivo. Outras maneiras  de otimização  consistem em propagar  constantes
(não   endereços   de   memória)   e   maximizar   a   quantidade   de   funcionalidades
cobertas pelas instruções (não minimizar).
O desenrolamento de estruturas de repetição é uma técnica de otimização que
pode ser utilizada no código fonte ou no código intermediário, no lugar do código
de  montagem,  e  as  escolhas  de   substituição  devem se  basear   no   custo   das
substituições.
3. As variáveis de um programa são utilizadas para o armazenamento de dados que
devem ser processados. Apesar de o desenvolvedor poder utilizar quantas
variáveis quiser no código fonte, o número de registradores em um
microprocessador é limitado.
Com relação à alocação de registradores, é correto afirmar que:
Você acertou!
C. para verificar quais variáveis podem ser utilizadas, é preciso determinar quando uma
variável está viva em determinado ponto do código.
Os registradores de um microprocessador  são elementos monolíticos,  que não
podem ser subdivididos à vontade. Para determinar quais variáveis podem ser
armazenadas em quais registradores, é preciso verificar quais variáveis
estão vivas em um dado momento do código, independentemente da sua
posição no código.
Para a utilização de uma variável, os conjuntos gen[i] e succ[i] precisam trabalhar
em conjunto para que conseguir verificar quais variáveis podem ser utilizadas em
qual ponto do código.
4. A propriedade de liveness é uma propriedade das variáveis de um programa
utilizada para determinar qual variável pode ser alocada para determinado
registrador.
Com relação à propriedade de liveness, é correto afirmar que:
Resposta correta.
B. quando uma variável está viva, ela pode interferir em outras variáveis, o que significa
que ambas não podem se alternar no mesmo resgitrador.
A lista de variáveis vivas deve conter as variáveis que estão em uso em
determinado ponto do programa, uma vez que, quando uma variável está
viva, ela pode interferir em outras variáveis e estas não podem compartilhar
o mesmo registrador.
Para verificar quais variáveis não podem compartilhar o mesmo registrador, utiliza-
se um grafo denominado grafo de interferência. A resolução desse grafo, porém, é
do tipo NP completo e, portanto, não tem solução ótima conhecida.
Assim,   para   resolver   esse  problema,   emprega-se o  algoritmo  de   coloração  de
nodos, com o número de cores limitado ao número de registradores.
5. Para a criação de código-objeto a partir do código intermediário, é preciso
realizar a divisão do código em blocos básicos, com suas instruções líderes e como
a execução flui entre os blocos.
Sobre as instruções líderes, assinale a alternativa correta.
Você acertou!
E. Referem-se à primeira instrução de três endereços do código intermediário, à qualquer
instrução que é alvo de um salto e a instrução que segue um salto.
As   regras  de  detecção  das   instruções   líderes  são   três  e  bem definidas. Toda
instrução é dita líder se for: a primeira instrução do código intermediário; o
alvo de um salto; ou a instrução que segue um salto.
As instruções líderes devem sempre iniciar o bloco básico e seguem os mesmos
critérios independentemente do algoritmo analisado.
	Geração de código de máquina - Compiladores
	Exercícios

Continue navegando