Система вызова в ассемблере работает следующим образом: stackoverflow.com
- Аргументы функции хранятся в стеке в порядке, зависящем от платформы. stackoverflow.com Также в стеке выделено место для возвращаемого значения. stackoverflow.com
- Адрес возврата для функции хранится в стеке или в специальном регистре процессора. stackoverflow.com
- Функция вызывается через специфичную для процессора инструкцию вызова или через обычную инструкцию jmp или br (переход/ветвление). stackoverflow.com
- Функция считывает аргументы (если таковые имеются) из стека и запускает код функции. stackoverflow.com
- Возвращаемое значение из функции хранится в указанном месте (стеке или специальном регистре процессора). stackoverflow.com
- Выполнение переходит обратно к вызывающему объекту, и стек очищается (путем восстановления указателя стека до его начального значения). stackoverflow.com
Детали работы системы вызова в ассемблере могут варьироваться в зависимости от платформы и компилятора. stackoverflow.com
Например, команда CALL в ассемблере передаёт управление по адресу, который передаётся в команду в качестве параметра. av-assembler.ru При этом процессор начинает выполнять команду, расположенную по этому адресу. av-assembler.ru