Использование памяти программами реального режима DOS
На Рис. 21.1 приведена схема распределения памяти программы Borland Pascal, для реального режима DOS.
Префикс программного сегмента (PSP) - это область длиной 256 байт, которая строится операционной системой DOS при загрузке файла .EXE. Адрес PSP сохраняется в предописанной переменной Borland Pascal длиной в слово с именем PrefixSeg.
Каждой программе (которая включает в себя основную программу и каждый модуль) соответствует сегмент ее кода. Основная програм- ма занимает первый сегмент кода. Следующие сегменты кода заняты модулями (в порядке, обратном тому, в котором они указаны в опе- раторе uses). Последний сегмент кода занят библиотекой исполняю- щей системы (модуль System). Размер отдельного сегмента не может превышать 64К, однако общий размер кода ограничен только объемом имеющейся памяти.
Верхняя граница памяти DOS HeapEnd -->----------------------------- ¦ ¦ ¦ свободная память ¦ ¦ ¦ HeapPtr -->¦............................¦ ¦ динамически распределяемая ¦ ¦ область памяти ¦ ¦ (растет вверх) ^ ¦ HeapOrg -->+----------------------------+<-- OvrHeapEnd ¦ оверлейный буфер ¦ +----------------------------+<-- OvrHeapOrg ¦ стек (растет вниз) v ¦ SSeg:SPtr -->¦............................¦ ¦ свободный стек ¦ SSeg:0000 -->+----------------------------+ ¦ глобальные переменные ¦ ¦............................¦<------- ¦ типизированные константы ¦ ¦ DSeg:0000 -->+----------------------------+ ¦ ¦ кодовый сегмент ¦ ¦ ¦ модуля System ¦ ¦ ¦............................¦ ¦ ¦ кодовый сегмент ¦ ¦ ¦ первого модуля ¦ ¦ ¦............................¦ ¦ L----------------------------- содержимое . кодовый сегмент . образа . других модулей . файла .EXE ----------------------------- ¦ ¦............................¦ ¦ ¦ кодовый сегмент ¦ ¦ ¦ последнего модуля ¦ ¦ +----------------------------+ ¦ ¦ кодовый сегмент ¦ ¦ ¦ главной программы ¦ ¦ +----------------------------+<-------- ¦ префикс сегмента программы ¦ ¦ (PSP) ¦ PrefixSeg -->L-----------------------------