Menu

Pilhas Assembly ( Stack )

15 de agosto de 2015 - Fundamentos

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.

Deixe um comentário