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

  1. Pilha(Stack)
  2. Push e Pop
  3. Stack Pointer
  4. Pilha e Subrotina

A Stack(Pilha) do Z80 é semelhante a stack do 8080. Pode ser configurada para residir em qualquer local dos 64K disponível, exceto VDI.

Tab. 1: Pilha
SP Pilha
TOPO $????
- -
- -
(...) (...)
- -
- -
BASE $????

O valor inicial do SP é indefinido no reset do Z80 e deve ser configurado nas primeiras instruções do RESET do programa com a instrução de carga ou movimentação LD.

Ex:
LD SP, #$DFFF

O manual do hardware onde o Z80 é usado deve ser consultado sobre mais informações de inicialização do sistema em que o programa será executado para evitar erros.

As instruções do tipo pilha PUSH e POP são responsáveis pelo armazenamento e recuperação de dados na stack do Z80.

Sintaxe:
PUSH par
POP par

Apenas valores 16-bits podem ser empilhados ou desempilhados da stack. Assim, os pares AF, BC, DE, HL, IX, IY e SP podem ser utilizados. O registrador PC não pode ser manipulado diretamente e valores imediatos não são aceitos.

Ex:
PUSH AF ; Salva
POP BC ; Recupera

As instruções do PUSH e POP podem ser vistas com mais informações em Instruções: Pilha.

O registrador SP é responsável por armazenar o endereço/ponteiro do topo da pilha e através dele as instruções para armazenar e recuperar dados da pilha são executadas para manipular a pilha.

O SP é decrementado em duas unidades quando a instruções PUSH é executada e incrementado em duas unidades quando a instrução POP é executada.

Tab. 1: Pilha e PUSH/POP
Pilha PUSH POP
$FFFF (Topo) SP-2



SP+2
$XXXX (Base)

A ordem recuperação dos dados da pilha, o POP, deve ser inversa a a ordem de do PUSH. Caso os dados da pilha sejam recuperados de forma errada, ocorrerá erros no funcionamento do programa.

Ex:

PUSH BC
PUSH AF
POP AF
POP BC

Os valores contidos na pilha não são destruídos após o uso das instruções POP. O registrador SP é incrementado para informar que o espaço anteriormente utilizado está disponível para uso novamente.

A pilha do Z80 também é utilizada para a passagem de argumentos para subrotinas. O registrador 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 registrador SP deve ter seu valor restaurado para manter a consistência.

Como o Z80 possui um número considerável de registradores de uso geral, é comum o uso desses para a passagem de parâmtros para subrotinas. Caso os registradores não sejam suficientes, a RAM é usada.

É possível a manipulação manualmente o SP utilizando instruções de Aritméticas, Exchange e Movimentação e outras para manipulações mais complexas que envolvam parâmetros/argumentos.

O Z80 não possui instrução para criação de stack frame que é um espaço de memória alocado. Isso deve ser feito manualmente via manipulação do SP com as instruções mencionados no parágrafo anterior.

  1. 16/02/2026 - versão inicial: Pilha, Push e Pop, Stack Pointer e Subrotina