Когда вы pop
стек, операнд регистра просто получает значение, которое было на вершине стека. До тех пор, пока одинаковое количество байтов выдвигается и выталкивается, стек сбалансирован, независимо от того, куда идут байты. Вам не обязательно pop
возвращаться в то же место, где был источник вашего ранее push
ed значения.
Например, этот код загружает регистр ecx
с тем, что было в данный момент в eax
, без смещения стека:
push eax
pop ecx
Вы также можете выполнить эффективный «безоперандный» pop
, вручную настроив указатель стека:
push eax
...
add esp, 4 ; Discard 32-bits on top of stack
; Stack is now balanced (assuming the intermediate instructions did not misalign the stack)