Стек в архитектуре x86 — это непрерывная область памяти, которая используется для хранения переменных и вызова подпрограмм. ru.wikipedia.org
Некоторые особенности работы стека в этой архитектуре:
- Стек растёт в направлении меньших адресов. habr.com leovangit.github.io Это значит, что последний записанный в стек элемент будет расположен по адресу младше остальных элементов стека. intuit.ru
- Указатель стека (ESP) указывает на верхушку стека. habr.com По мере того, как объекты добавляются и снимаются со стека, адрес в ESP изменяется, но всегда указывает на последний добавленный и ещё не снятый со стека объект. habr.com
- При вызове подпрограммы процессор помещает в стек адрес команды, следующей за командой вызова подпрограммы, то есть «адрес возврата» из подпрограммы. ru.wikipedia.org
- По команде возврата из стека извлекается адрес возврата в вызвавшую подпрограмму программу и осуществляется переход по этому адресу. ru.wikipedia.org
- При аппаратном прерывании процессор X86 автоматически сохраняет в стеке ещё и регистр флагов. ru.wikipedia.org
Стек представляет структуру LIFO (Last In, First Out или «Последний вошёл, первый вышел»). metanit.com Это значит, что получение данных из стека происходит в порядке, обратном их добавлению. metanit.com