ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 марта
458369 Топик полностью
fk0, легенда (30.10.2013 14:04, просмотров: 395) ответил SS:ESP на Не обязательно, хотя сложнее работать с аргументами. Сохранить текущий sp, попросить новый блок памяти, загрузить новый sp, юзать, перед выходом освободить блок, вернуть старый sp.
Замечтельно. Но как в новом стеке получить доступ к аргументам и переменным функции в _старом_. И как быть, что теперь часть переменных у нас в новом стеке, а часть в старом. Невозможно! Только если это всё проделать в прологе функции и, одновременно, продублировать аргументы из старого стека в новый там же. Но это нифига не будет работать для функций с переменным числом аргументов (их количество неизвестно). Выводы: стек может менять только вызывающая функция. До того, как начнёт вызывать и класть аргументы в стек вызываемой. Причём в этот момент времени свои аргументы и переменные должна адресовать через FP, а вызываемый стек через уже SP. Что, в принципе, реально, даже, наверное, ничего от компилятора не нужно.
[ZX]