Pular para o conteúdo principal

Questão de Arquitetura de Computadores — Compilador — FCC 2022

Arquitetura de ComputadoresCompilador
Código
fc062380
Banca
FCC
Órgão
PGE-AM
Ano
2022
Cargo
Técnico em Gestão Procuratorial Especialidade Informática
Em relação aos fundamentos das linguagens de programação, é correto afirmar:
  1. AUm dos desafios da tradução de programas escritos em linguagens de alto nível para programas em linguagem assembler é minimizar a quantidade de variáveis mapeadas em registradores e, com isso, melhorar o desempenho do programa. Os compiladores são capazes de fazer esta tarefa muito bem, porém o resultado final depende muito da quantidade de registradores que estão disponíveis na arquitetura alvo.
  2. BCada vez é mais incomum encontrar programas úteis que usam poucas variáveis. Quando ocorre uma atribuição a alguma variável de um programa de alto nível, esta atribuição é mapeada para o endereço da variável correspondente. Porém, como o acesso à memória é mais rápido do que o acesso a registradores, é mais eficiente mapear as variáveis em endereços de memória ROM.
  3. CUma solução frequente para melhorar o desempenho dos processadores é anexar uma memória super rápida, próximo da CPU − a memória cache, cuja divisão em níveis torna a busca de informações do processador mais otimizada. Mas, como são muito mais caras, as memórias cache são normalmente pequenas.
  4. DEm um comando de repetição como “while (i<10)”, o laço deve ser interrompido quando a condição do laço for falsa. Em assembler, a instrução de desvio apropriada é algo como "desvie se i>10", ou seja, desvie se a expressão (i<=10) for falsa.
  5. EAs linguagens de programação têm pelo menos dois tipos de comandos condicionais: if-then e if-then-else. Se a expressão testada for verdadeira, a sequência de comandos contida nos comandos assembler relativos ao “then” deve ser executada e, se for falsa, a sequência de comandos do “else” deve ser executada. Em situações particulares, os comandos do “then” e do “else” são executados consecutivamente.
Revelar gabarito e comentário

GabaritoC — Uma solução frequente para melhorar o desempenho dos processadores é anexar uma memória super rápida, próximo da CPU − a memória cache, cuja divisão em níveis torna a busca de informações do processador mais otimizada. Mas, como são muito mais caras, as memórias cache são normalmente pequenas.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Fundamentos das linguagens de programação e compiladores

Gabarito: letra C. A única alternativa correta descreve adequadamente a memória cache como uma memória rápida e de pequeno porte posicionada próxima à CPU, otimizando o desempenho do processador. As demais alternativas contêm erros conceituais.

Alternativa A — ❌ Incorreta

Afirma que o desafio da tradução é minimizar o número de variáveis mapeadas em registradores. Na verdade, o objetivo da alocação de registradores é maximizar o uso desses registradores (mais rápidos que a memória principal). A afirmação inverte o conceito correto.

Alternativa B — ❌ Incorreta

Apresenta dois erros: (1) o acesso a registradores é mais rápido que o acesso à memória, e não o contrário; (2) variáveis não são armazenadas em ROM (memória somente leitura), e sim em RAM. A hierarquia de memória é mal compreendida.

Alternativa C — ✅ Correta ⟵ GABARITO

Descreve corretamente a memória cache: memória de alta velocidade, menor e mais cara, posicionada próxima à CPU, com divisão em níveis para otimizar a busca. Conceito fundamental em arquitetura de computadores e relevante para compiladores.

Alternativa D — ❌ Incorreta

Em um laço while (i < 10), a condição de saída é i >= 10. A instrução de desvio correta em assembly seria "desvie se i >= 10". A alternativa propõe "desvie se i > 10", ignorando o caso i == 10, alterando a semântica do laço.

Alternativa E — ❌ Incorreta

Afirma que em situações particulares os blocos then e else podem ser executados consecutivamente. Isso é falso: o comando if-then-else é mutuamente exclusivo – apenas um dos blocos é executado. A afirmação contradiz o funcionamento básico de condicionais.

Gabarito: letra C – única alternativa correta.

Link permanente: /questoes/fc062380