Maria, analista de TI, observou que o tipo mais primitivo de linguagem de programação é a linguagem que o computador entende diretamente, isto é, as instruções que podem ser diretamente executadas pelo hardware, ou seja, pela UCP (processador). Para criar um programa em linguagem de máquina, Maria deve conhecer todas as instruções disponíveis para aquela máquina e seus respectivos códigos de operação e formatos, assim como os registradores da UCP disponíveis e os endereços das células de memória onde serão armazenadas as instruções e os dados. Nesse contexto, Maria pretende converter para linguagem de máquina um programa escrito em linguagem de mais alto nível do que o da linguagem de montagem e que gera o código-objeto. Para tal Maria utilizará o método:
- A)execução;
Execução não é o método de conversão para linguagem de máquina; é a etapa em que o programa já traduzido é apenas rodado.
- B)montagem;
Montagem traduz linguagem de montagem para máquina, mas aqui o enunciado fala de uma linguagem mais alta do que assembly.
- C)compilação;
Compilação é o processo que traduz o programa-fonte para código-objeto ou código de máquina, exatamente como descrito.
- D)interpretação;
Interpretação executa o programa diretamente, sem a etapa clássica de geração de código-objeto cobrada na questão.
- E)linkedição ou ligação.
Linkedição ou ligação apenas reúne módulos e bibliotecas já traduzidos, não faz a tradução principal para linguagem de máquina.
Gabarito: C
A questão trata da passagem de uma linguagem de programação de alto nível para linguagem de máquina. Quando voce escreve um programa em C, Java, Pascal ou outra linguagem mais próxima da linguagem humana, ele nao vira instrução de hardware “no olho”: precisa de um processo de tradução. Esse processo pode gerar codigo-objeto, que depois pode ser ligado a bibliotecas e, ao final, resultar em um executável. Nesse contexto, o método correto é a compilação. O compilador pega o programa-fonte, verifica sua estrutura e traduz para linguagem de máquina ou para um codigo intermediário/objeto. Em provas, a pista mais forte é justamente a expressão “mais alto nível do que o da linguagem de montagem” e “gera o código-objeto”. Isso é cara de compilador, com crachá e tudo. Já a montagem é o processo típico de traduzir linguagem de montagem para linguagem de máquina, usando um assembler. Como o enunciado fala de linguagem ainda mais alta do que assembly, não é esse o caminho. Interpretação, por sua vez, executa o programa sem gerar, em regra, um codigo-objeto final daquela forma clássica cobrada pela banca. E linkedição ou ligação só junta partes e bibliotecas, não faz a tradução principal do programa-fonte. Doutrinariamente, a distinção clássica é essa: compilador traduz previamente o código-fonte, interpretador executa instrução por instrução, assembler converte assembly, e linker liga módulos já traduzidos. Por isso, o gabarito C está correto.