в первых же свободных участках
располагаете объекты данных в первых же свободных участках памяти.
Программа, управляющая доступом к областям данных, должна при этом
для каждой переменной использовать четырехбайтовый указатель. Из
них два байта используется для смещения и еще два байта для значе-
ния сегмента. Когда программе нужно полусить доступ к данным, она
извлекает адрес из области хранения адресов с помощью команд LDS
или LES. Если вам требуется еще большая экономия памяти, то вы
фактически можете хранить указатель в трехбайтовом поле. Два байта
содержат адрес сегмента данных, а оставшийся байт содержит смещение
данного объекта внутри сегмента. Начальное смещение всегда будет
иметь значение от 0 до 15, так как значение сегмента всегда кратно
16.
Хотя описанный метод наиболее эффективен в отношении объема
памяти, занимаемой данными, у него имеются пара недостатков.
Максимальная длина объекта данных немного меньше, чем 64 кбайт. В
рамках данной стратегии наихудшим окажется случай, когда абсолютный
адрес объекта данных кончается на 0FH. Так как максимальное
значение смещения в любом сегменте равно 0FFFFH, то максимальная
длина переменной будет 64К - 15, или 65521 байт. Второй недостаток
этого метода связан с затратами памяти для хранения указателей к
объектам данных. При большом числе объектов для хранения наряду с
ними всех четырехбайтовых (или трехбайтовых) указателей потребуется
много памяти.
Примером использования описанного метода распределения памяти
может служить блок управления файлом FCB. В последнем примере
работающей с DOS программы мы располагали блок FCB в произвольном
месте программы. Какого-либо выравнивания местоположения этой
структуры данных не производилось. Затем при обращении к DOS для
выполнения файловой операции программе понадобился четырехбайтовый
указатель. Идентификация блока FCB для DOS осуществлялось парой
регистров DS:DX.
Содержание Назад Вперед