Руководство по языку B.Pascal 7

       

Сегменты данных и стека


Каждая прикладная программа защищенного режима DOS или биб- лиотека содержит сегмент данных, которые может иметь размер до 64К. На сегмент всегда указывает регистр сегмента данных (DS). Этот сегмент содержит типизированные константы и глобальные пере- менные.

Кроме сегмента данных, прикладная программа защищенного ре- жима DOS имеет сегмент стека, который используется для хранения локальных переменных, распределенных процедурами и функциями. На входе в прикладную программу регистр сегмента стека (SS) и указа- тель стека (SP) загружены таким образом, что пара регистров SS:SP указывает на первый байт после сегмента стека. Когда вызываются процедуры и функции, SP для выделения пространства для парамет- ров, адреса возврата и локальных переменных перемещается вниз. Когда подпрограмма возвращает управление, процесс изменяется на обратный: указатель стека увеличивается до значения, которое он имел перед вызовом. По умолчанию размер сегмента стека равен 16К, но с помощью директивы компилятора $M его можно изменить.

В отличие от прикладной программы, DDL DOS защищенного режи- ма не имеет сегмента стека. Когда в DLL вызывается процедура или функция, регистр DS изменяется, чтобы указывать на сегмент данных DLL, но пара регистров SS:SP не модифицируется. Таким образом, DLL всегда использует сегмент стека вызывающей прикладной прог- раммы.



Содержание раздела