Стек вызовов функций – это структура данных, организованная по принципу LIFO ("последний пришел - первый ушел"), используемая для управления вызовами функций в программе. Каждый раз, когда вызывается функция, в стеке создается новая запись активации, а после завершения работы функции эта запись удаляется.

Информация, хранящаяся в записи активации функции:

Указатели стека:

Порядок действий при вызове функции:

  1. Вызывающая функция помещает аргументы функции в стек, начиная с последнего.
  2. Вызывающая функция сохраняет необходимые регистры (например, EAX, ECX, EDX) в стеке.

image.png

  1. Вызывающая функция выполняет инструкцию CALL, которая помещает адрес возврата в стек и передает управление вызываемой функции.
  2. Вызываемая функция сохраняет значение EBP в стеке, а затем копирует текущее значение ESP в EBP, устанавливая новый стековый фрейм.
  3. Вызываемая функция выделяет место в стеке для локальных переменных и временных данных.

image.png

  1. Вызываемая функция выполняет свой код.
  2. Перед возвратом вызываемая функция помещает возвращаемое значение в регистр EAX (для значений меньше 4 байт).