Alternativa E - Código de três endereços, pois representa bem o modelo de duas entradas e uma saída típico do RISC.
Análise da Questão
A questão aborda a escolha da Representação Intermediária (IR) em compiladores, especificamente no contexto das arquiteturas RISC (Reduced Instruction Set Computer). O enunciado fornece características cruciais para identificar o tipo correto de código intermediário.
Características Identificadas no Enunciado:
Para encontrar a resposta correta, devemos cruzar os dados fornecidos com a teoria de compiladores:
- Operações Simples: As instruções não devem ser complexas.
- Sem dependência de acumuladores: Não deve haver um registrador implícito que armazene resultados parciais obrigatoriamente.
- Três Operandos: Explicitamente mencionado como "dois de entrada e um de saída".
- Objetivo: Facilitar otimizações e geração de código eficiente.
Por que a Alternativa E é a Correta?
O termo técnico para uma representação onde cada instrução possui explicitamente até três operandos (destino, fonte 1 e fonte 2) é Código de Três Endereços (Three-Address Code - TAC).
- Formato Típico: Uma instrução segue a lógica matemática A = B \text{ op } C, onde:
- A é a saída (um endereço/registrador).
- B e C são as entradas (dois endereços/registradores).
- Compatibilidade com RISC: Arquiteturas RISC operam predominantemente sobre registradores. O uso de três endereços mapeia diretamente para operações registrador-a-registrador sem necessidade de manipulação excessiva de memória ou acumuladores ocultos.
Por que as outras alternativas estão incorretas?
Embora a imagem mostre a opção "Código de um endereço" selecionada, essa marcação está incorreta baseada na descrição técnica fornecida. Veja a comparação:
| Tipo de Código | Operadores | Característica Principal |
|---|
| Zero Endereço | 0 (Implícitos) | Uso de Pilha (Stack). Ex: Java Bytecode. |
| Um Endereço | 1 (Explícito) | Uso de Acumulador implícito. |
| Dois Endereços | 2 | Destino e Fonte (A = A + B). |
| Três Endereços | 3 | Fonte 1, Fonte 2, Destino (A = B + C). |
- Alternativa B (Selecionada na imagem): Fala em "código de um endereço" e "pilha de operandos". Isso descreve máquinas baseadas em pilha (zero-endereço), o que contradiz a exigência explícita de "três operandos" citada no texto.
- Alternativa D (Dois endereços): Simplifica a codificação, mas geralmente implica que o destino é uma das fontes, não sendo tão flexível para otimização quanto o de três endereços.
Conclusão
O enunciado define classicamente o Código de Três Endereços ao mencionar "dois de entrada e um de saída". Portanto, a alternativa correta é a E, independentemente da marcação visual na imagem apresentada.