ti-enxame.com

explicação sobre as instruções Push ebp e pop ebp na montagem

eu usei stack no Assembly, mas não tive idéia sobre Push ebp e pop ebp.

.intel_syntax noprefix

.include "console.i"

.text

askl:   .asciz  "Enter length: "
askb:   .asciz  "Enter breadth: "
ans:    .asciz  "Perimeter = "

_entry:

    Push    ebp     # establishing stack-frame
    mov ebp, esp
    sub esp, 12

    Prompt  askl
    GetInt  [ebp-4]     # length
    Prompt  askb
    GetInt  [ebp-8]     # breadth

    mov eax, [ebp-4]    # eax = l
    add eax, [ebp-8]    # eax = l + b
    add eax, eax    # eax = 2 * (l + b)
    mov [ebp-12], eax

    Prompt  ans
    PutInt  [ebp-12]
    PutEoL

    mov esp, ebp
    pop ebp     # unwinding stack-frame
    ret

.global _entry

.end
40
bunty

Não tenho certeza se essa é sua dúvida, mas talvez você esteja se perguntando sobre isso:

Push    ebp
mov ebp, esp
sub esp, 12

As 2 primeiras linhas são conhecidas como função de montagem prólogo. Ele armazena o ponteiro base anterior (ebp) e define o ponteiro base como se estivesse no topo da pilha. Isso significa que todo o conteúdo da pilha é salvo na pilha, para que a função possa Empurrar/pop na pilha.

O sub esp,12 line está economizando espaço para variáveis ​​locais na função.

No final, você tem:

mov esp, ebp
pop ebp
ret

Este é o inverso que o prólogo faz, para que o contexto anterior possa ser restaurado.

Esta é a sua dúvida? :)

68
jyz

ebp é conhecido como ponteiro base ou ponteiro de quadro. Na entrada da sua função, você a pressiona (para salvar o valor da função de chamada). Em seguida, copie esp, o ponteiro da pilha, em ebp, para que ebp aponte agora para o quadro de pilha da sua função. No final da sua função, você pop ebp para que o valor da função de chamada seja restaurado.

Para alguns esclarecimentos sobre exatamente o que está acontecendo - a instrução Push coloca o valor do registro especificado (ebp neste caso) na pilha e diminui o ponteiro da pilha na quantidade apropriada . A operação pop é o oposto - ela incrementa o ponteiro da pilha e pega um valor da pilha e o coloca no registro especificado.

41
Carl Norum