É por vezes necessário usar registos dentro do procedimento que também estão a ser usados cá fora no programa chamador. Para que o uso de registos dentro dos procedimentos não interfira com a sua utilização cá fora usa-se a stack para guardar os seus valores originais. A ideia é escrever na stack os valores dos registos que são usados no procedimento antes do procedimento começar a usá-los e consequentemente a alterá-los, e no fim do procedimento voltar a pôr tudo como estava.
Para isso usam-se as instruções PUSH e POP.
A instrução PUSH do 8086 tem o seguinte formato:
PUSH <fonte>
Quando executada, esta instrução, executa duas operações. Primeiro decrementa o SP dois valores e depois copia para a posição da stack apontada por SP o conteúdo de <fonte>. A fonte pode ser um registo de 16 bits ou uma palavra em memória.
A instrução POP do 8086 tem o seguinte formato:
POP <destino>
Quando executada, esta instrução, executa duas operações. Primeiro copia para o conteúdo de <destino> a palavra em stack apontada pelo registo SP e depois incrementa SP dois valores. O destino pode ser um registo de 16 bits ou uma palavra em memória.
Como a stack funciona segundo o principio last-in-first-out os pops tem que ser efectuados pela ordem inversa pela qual foram efectuados os pushs.