Журнал Системный Администратор, Ноябрь 2007

Журнал Системный Администратор

Ноябрь 2007

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке


Что мы знаем о стеке?

Владимир Мешков

Предпримем попытку систематизировать собственные знания о стеке и максимально подробно рассмотрим, какую роль играет стек в процедурном программировании.

Стек – это область памяти, предназначенная для временного хранения данных. Стек адресуется при помощи пары регистров SS:ESP. Регистр SS (Stack Segment) содержит селектор сегмента стека при работе процессора в защищенном режиме, ESP (Stack Pointer, указатель стека) – смещение относительно базового адреса сегмента стека. Упрощенная схема адресации данных в стеке, без привязки к какой-либо конкретной операционной системе, показана на рис. 1. Схема адресации сегментов команд и данных идентична изображенной на рисунке схеме адресации сегмента стека. При подготовке статьи использовались ОС Linux, компилятор gcc-4.1.2, отладчик gdb-6.6.

Рисунок 1. Адресация стека

Для помещения данных в стек и извлечения данных из него используются инструкции процессора push и pop. Стек работает по принципу FILO (First Input – Last Output, первым вошел – последним вышел). Каждый вызов инструкции push/pop изменяет значение регистра ESP. Инструкция push размещает данные по адресу, на который указывает ESP, и сдвигает верхушку стека в сторону младших адресов, уменьшая значение ESP. Инструкция pop поступает наоборот – снимает данные с верхушки стека и увеличивает значение ESP.

Оставшая часть статьи доступна только подписчикам. Если вы желаете продолжить чтение этой статьи, то вам необходимо подписаться на эту статью или весь номер.

Подписаться на весь номер

Зарегистриванные пользователи, пожалуйста следуйте по этой ссылке