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

  1. Entender a Pilha(Stack)
  2. Pilha e Subrotina
  3. 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(Stack Pointer) é 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.

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.

Como 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 erros no software.

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.

A pilha do 8086 também é utilizada para a passagem de argumentos para subrotinas. O registrador SP(SS:SP) é manipulado para recuperar esses argumentos e também armazenar valores de retorno.

Tab. 2: Argumentos na pilha
SP Argumentos Descrição
+6 $aabb arg 1
+4 $ccdd arg 2
+2 $eeff arg 3
SP - -

Para armazenar espaço para valores de retorno, a stack deve ser decrementada de acordo com os valores de retorno.

Tab. 3: Espaço para retorno
SP Retorno Descrição
+6 - retorno 1
+4 - retorno 2
+2 - retorno 3
SP - -

Tanto quanto argumentos quanto espaço para retorno, após o retorno da subrotina o SP deve ter seu valor restaurado para manter a consistência.

Quando argumentos/parametros são passados para subrotinas, o registrador BP para acessar os dados na pilha.

Sintaxe

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

  1. 17/04/2026 - revisão 3 - Ajustes: pontuais, uso de BP movido para 'Pilha e Subrotina'
  2. 21/01/2026 - revisão 2 - Adição: Pilha e subrotina
  3. 18/02/2025 - revisão 1 - ajustes pontuais
  4. 29/10/2024 - versão inicial