Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Entender a Pilha(Stack)
  2. SP - Movimentação circular

A Stack(Pilha) do 8086, é utilizada para armazenar dados 16-Bits apenas. A pilha cresce a partir do limite superior, definido pelo usuário, em direção ao limite inferior.

O registrador SP é responsável por armazenar o endereço/ponteiro do topo da pilha e o registrador de segmento SS, a base da pilha.

Sintaxe

SS:SP

Através do endereço formato por ambos registradores apresentados na sintaxe acima, as instruções podem trabalhar com os dados na stack.

Quando argumentos são passados para subrotinas, esses podem ser armazenados na pilha e recuperador com uso do registrador BP.

Sintaxe

SS:[BP + 2]
SS:[BP + 4]
SS:[BP + 8]

Internamente, as interrupções e chamadas de subrotinas também utilizam a pilha para armazenar dados essenciais para transferência e retorno de fluxo de execução.

Exemplo

PUSH AX
POP AX
INT $10
IRET
CALL funcao
RET

As instruções do tipo PUSH e POP são responsáveis pelo armazenamento e remoção de dados na pilha respectivamente. O SP é decrementado, em 2 bytes, no PUSH e incrementado no POP em 2 bytes.

Tab. 1: Pilha 8086
Pilha PUSH POP
$FFFFFF SP - 2
SP + 2
...
...
$000000

Os valores contidos na pilha não são "limpos" após a recuperação. O registrador SP é incrementado, de acordo o tamanho do dado, para informar que o espaço anteriormente utilizado está disponível para uso.

Os dados são empilhados na forma LIFO, Last In-First OUT, a recuperação deve ser na ordem inversa para que não ocorram problemas.

Exemplo

PUSH AX
PUSH SI
PUSH DI
(…)
POP DI
POP SI
POP AX

É de total responsabilidade do usuário salvar e recuperar dados da pilha de forma correta, bem como alterar seus dados.

  1. 18/02/2025 - revisão 1 - ajustes pontuais
  2. 29/10/2024 - versão inicial