Использует ли процессор более одного стека для отделения стека вызовов от стека выражений / регистров?

Я читал некоторые основные статьи об обработке памяти процессором, и я был озадачен тем, как процессор обрабатывает то, что происходит дальше.

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

Если бы кто-нибудь мог объяснить мне, как работает процессор в отношении его стека (ов), это бы мне очень помогло.

2 ответа

Решение

Все процессоры, над которыми я работал, просто использовали для них один стек.

Если вы думаете о том, что делает процессор, вам нужен только один стек. Во время вычислений вы можете использовать тот же стек, что и стек вызовов, так как по завершении вычислений стек снова будет "чистым". То же самое для локальных переменных, но перед тем, как выйти из области локальных переменных, ваш стек будет чистым, и вызов будет возвращаться правильно.

Вы можете изменить стек, просто установив регистры сегмента и указателя SS:SP (просто сохраните текущие значения). Параметры вызова процедуры и локальные переменные происходят в стеке. А динамически создаваемые объекты размещаются в куче (DS:DI). Пара регистров SS:SP сместилась на нужное количество байтов, чтобы зарезервировать необходимую память для вызова процедуры. А при возврате SS:SP возвращается в состояние предварительного вызова.

Другие вопросы по тегам