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

  1. Instruções de Pilha
  2. Instrução PUSH
  3. Instrução PUSHA (80186)
  4. Instrução POP
  5. Instrução POPA (80186)
  6. Instrução PUSHF
  7. Instrução POPF
  8. Instruções ENTER e LEAVE (80186)

As instruções que manipulam a pilha são responsáveis por salvar e recuperar dados da Stack. Normalmente, utilizadas para realizar backup de registradores durante a execução de programas e também endereços de retorno de subrotinas.

Nenhuma flag é afetada pelas instruções de pilha, exceto POPF, e apenas os valores de 16-bits podem ser salvos ou restaurados.

A recuperação de dados da pilha deve ser feita de forma inversa ao armazenamento para que os dados salvos sejam restaurados na ordem correta.

A pilha é acessada utilizando o registrador de Segmento SS, Stack Segment, em conjunto com o registrador SP na forma SS:[SP].

Os registradores CS e IP não podem ser operandos das instruções de pilha. Apenas instruções como CALL e RET manipulam esses registradores.

O uso da pilha de forma incorreta ao armazenar e restaurar dados, ou manipular endereços CS e IP, pode acarretar em erros na execução de um programa.

Os registradores SI e DI também podem ser utilizados para backup, mas esse uso ser feito com cuidado para evitar erros.

Notação utilizada:
; Comentário
[] Conteúdo de memória
<- Atribuição
MEM Endereço de memória
REG Registradores de uso geral
SREG Registradores de segmento

Mais informações sobre os registradores e flags podem ser vistas em Registradores e Flags. O funcionamento da Pilha no 8086 pode ser vista em Pilha.

Com a instrução PUSH podemos salvar os registradores de segmento, exceto CS e IP, e de uso geral na pilha. As flags possuem instruções próprias que serão vistas mais adiante.

Operação:
SP <- SP - 2
SS:[SP] <- REG ou SREG
Operandos:
REG
SREG
memory
Ex:
MOV BX, FFFFh
PUSH BX

A instrução POP, de forma oposta à PUSH, é usada para recuperar um valor contido na pilha e atribuí-lo a qualquer um dos registrador de uso geral ou segmento, exceto CS e IP.

Operação:
REG ou SREG
SP <- SP + 2
Operandos:
REG
SREG
memory
Ex:
MOV BX, FFFFh
PUSH BX
; uso de BX
POP BX ; restaura BX

Semelhenta à instrução PUSH, a instrução PUSHF também salva dados na pilha do 8086. Pórem, essa instrução tem como operando, implícito, o registrador PSR que é salvo na pilha.

Operação:
SP <- SP - 2
SS:[SP] <- PSR/Flags
Operandos:
-
Exemplo:
CLD
CLC
PUSHF

Semelhenta à instrução POP, a instrução POPF restaura dados na pilha do 8086. Pórem, essa instrução tem como operando de destino implícito, o registrador PSR, onde o valor restaurado da pilha tem como destino.

Operação:
PSR <- SS:[SP]
SP <- SP + 2
Operandos:
-
Exemplo:
CLD
CLC
PUSHF
; omitido
POPF
  1. 18/02/2025 - Ajustes pontuais
  2. 04/12/2024 - versão inicial