Pular para o conteúdo principal

Questão de Programação — Assembly — FGV 2024

ProgramaçãoAssembly
Código
fg085503
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Júnior I - Desenvolvimento de Software Embarcado
Na programação de sub-rotinas em linguagem assembly, é comum o armazenamento temporário de dados e/ou de endereços, para que sejam restaurados logo após o retorno à função principal. As pilhas (stacks) são estruturas de dados do tipo LIFO (Last In, First Out) adequadas para armazenar dados e/ou endereços quando alguma sub-rotina é chamada. Os conjuntos de instruções das arquiteturas mais comumente utilizadas possuem instruções específicas de acesso à pilha.Na arquitetura 8051, as instruções usadas para retirar dados da pilha e para armazenar dados na pilha, colocando-os em registradores de uso geral, são, respectivamente,
  1. ARET e ACALL.
  2. BRETI e LCALL.
  3. CSWAP e SJMP.
  4. DPOP e PUSH.
  5. EDEC SP e INC SP.
Revelar gabarito e comentário

GabaritoD — POP e PUSH.

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”.

Instruções de pilha na arquitetura 8051

Gabarito: letra D. Na arquitetura 8051 (e na maioria dos processadores), as instruções específicas para manipular a pilha são PUSH (para armazenar um dado no topo da pilha) e POP (para retirar um dado do topo da pilha e colocá-lo em um registrador ou local de memória). A questão pede exatamente essas duas, na ordem: retirar (POP) e armazenar (PUSH).

O contexto fornecido não detalha o conjunto de instruções do 8051, mas este é um conhecimento fundamental de assembly: toda arquitetura que possui pilha oferece instruções do tipo PUSH/POP (ou equivalentes). No 8051, o mnemônico é exatamente POP e PUSH.

Alternativa A — ❌ Incorreta

RET e ACALL são instruções de controle de sub-rotina: ACALL chama uma sub-rotina (empurra o endereço de retorno na pilha) e RET retorna da sub-rotina (puxa o endereço). Não servem para armazenar/retirar dados genéricos em registradores.

Alternativa B — ❌ Incorreta

RETI é retorno de interrupção; LCALL é chamada longa de sub-rotina. Novamente instruções de fluxo, não de manipulação direta de dados na pilha.

Alternativa C — ❌ Incorreta

SWAP troca os nibbles de um registrador; SJMP é um salto incondicional curto. Nenhuma relação com pilha.

Alternativa D — ✅ Correta ⟵ GABARITO

POP retira um byte do topo da pilha e o coloca em um registrador ou endereço de memória; PUSH coloca um dado no topo da pilha. São as instruções padrão para acesso à pilha no 8051.

Alternativa E — ❌ Incorreta

DEC SP e INC SP decrementam/incrementam o Stack Pointer (ponteiro de pilha), mas não transferem dados entre a pilha e registradores. Manipulam o ponteiro, mas não são as instruções de “armazenar/retirar dados” pedidas.

NÃO CAIA NESSA!

A banca mistura instruções de chamada/retorno (RET, ACALL, RETI, LCALL) e de manipulação do ponteiro (DEC/INC SP) com as verdadeiras instruções de pilha. Memorize: PUSH empurra, POP puxa — são as únicas que efetivamente movem dados entre a pilha e os registradores.

Gabarito: letra D — POP e PUSH.

Link permanente: /questoes/fg085503