стек для этого:
push %esi
push %edi
...
...
...
pop %edi
pop %esi
Всегда обращайте внимание на заказ. Также используйте соответствующую версию push
/ pop
.
Если вам нужно одновременно сохранить и получить доступ к различным значениям, лучшим решением будет создание собственного стекового кадра.
Пример (в начале функции, синтаксис AT & T):
push %ebp // save the old ebp
mov %esp, %ebp // ebp now points to the top of the stack
sub X, %ebp // reserve X bytes for the current function
Теперь вы можете ссылаться на области памяти со ссылкой на% ebp, например:
movl $1, -4(%ebp) // moves constant 1 to the first free location
movl $1, -8(%ebp) // moves constant 1 to the next free location
addl -4(%ebp), -8(%ebp) // add -4(%ebp) and -8(%ebp) together and write in -8(%ebp)
Аналогично, вы можете сохранить свою первую переменную в -4 (% ebp) и свою вторую в -8 (% ebp).
Для уничтожения стекового кадра и возврата:
movl %ebp, %esp
popl %ebp
ret
Вам не нужно очищать память, так как она будет перезаписана, как только это пространство будет использовано снова.