Pilha e chamadas de funções
Memória: guarde para recuperar
RAX guarda 3. Guarde esse valor na pilha, mude RAX para 9 e recupere o 3 em RBX.
Blocos
Seu programa
1 instrução- 01 MOV
mov rax, 3
Resultado
Aguardando suas instruções
vaziaSimulador didático · blocos equivalem a instruções Intel/NASM. Não executa Assembly nativo.
Entender melhor
PUSH guardou uma cópia na memória da pilha; POP a devolveu. Mudar RAX não alterou a cópia.
Este laboratório modela MOV, ADD, SUB, CMP, saltos de igualdade e pilha. Os registradores começam sem valor; a aritmética usa 64 bits sem sinal. Só ZF é representada, e cada execução recomeça do início. Repetições param após 200 passos. Não simula memória, outras flags, chamadas ao Linux ou um processador completo.
Consultar a lição completaEntender melhor · Pilha e chamadas de funções
Compreender a ordem da pilha e a relação entre CALL e RET.
O último que entra é o primeiro que sai
A pilha é uma região de memória usada com uma ordem especial: o último valor colocado é o primeiro retirado. Pense em uma pilha de pratos. O registrador RSP aponta para o topo dessa região.
Em x86-64, PUSH com um registrador de 64 bits reduz RSP em 8 bytes e guarda o valor. POP lê o valor do topo e aumenta RSP em 8. O trecho pressupõe uma pilha válida, como a fornecida pelo Linux ao iniciar um processo.
Chamar e voltar
CALL guarda um endereço de retorno na pilha e desvia para uma rotina. RET retira esse endereço e volta para a instrução após a chamada. Uma rotina é um trecho de código que pode ser reutilizado.
A pilha precisa permanecer equilibrada: retirar valores a mais pode corromper o retorno. Chamadas a bibliotecas também seguem regras de alinhamento e preservação de registradores; o pequeno exemplo aqui não faz essas chamadas.
Um exemplo, passo a passo
; Trecho x86-64 · Intel / NASM · Linux mov rax, 3 push rax ; guarda 3 na pilha mov rax, 9 pop rbx ; recupera 3 em RBX
Entendendo cada passo
- PUSH guarda uma cópia de 3 na memória da pilha.
- Alterar RAX para 9 não altera a cópia guardada.
- POP recupera 3 em RBX. Um PUSH e um POP do mesmo tamanho restauram RSP.
A pilha guarda valores em ordem inversa de entrada e também viabiliza o retorno de chamadas.
Revisão complementar
No exemplo, POP RBX recupera o valor 9 porque RAX mudou.
Marcação opcional, salva apenas neste navegador. Clique novamente para desfazer.