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

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.

  1. 21/01/2026 - revisão 2 - Adição: Pilha e subrotina
  2. 18/02/2025 - revisão 1 - ajustes pontuais
  3. 29/10/2024 - versão inicial