Stack ( Pilha )
Registradores envolvidos: SP (Stack Pointer)
Comando assembly envolvidos: PUSH , POP
Se você já refletiu sobre os Registradores do Assembly ( Variáveis para guardar valor ), pode ter percebido que não há tantos assim, qualquer sistema razoável tem 100 vezes mais no mínimo, netão vem a pergunta: E Como o compilador consegue transformnar em assembly (linguagem de máquina) um programa em C, Delphi, VB, etc ?
O segredo todo é Reultilizar a mesma variável várias vezes, e isto se faz usando o Stack, a Pilha, para isto temos um registrador que gerencia a pilha, que é o SP (Stack Pointer) e ele existe desde a época de 8 bits, e provavelmente existirá sempre na arquitetura Intel. A Função do registrador SP é guardar o endereço onde sera armazenado ao valor do Registrador que iremos usar várias vezes para fins diferentes, desta forma, ele grava o valor atual, reutiliza o registrador (exemplo AX) e depois de usar, pega o valor de volta no Stack.
Veja um Exemplo:
AX = 20
PUSH AX ( ENVIA VALOR PARA O STACK )
AX = 50
POP AX ( OBTEM O VALOR 20 DO STACK )
O Stack não é um lugar estranho na memória, ele é reservado assim que rodamos o programa, e o endereço da memória onde fica o Stack é dado pelo registrador SP, sempre que empurramos um valor para o Stack (como PUSH) , o valor so SP é alterado em -1 para outro endereçamento, porque o anterior já foi usado , desta forma ele vai diminuindo gradualmente, e sempre que recuepramos um valor, o SPé incrementado em +1 , desta forma, os valores precisam ser colocados e obtidos na ordem.