"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу авторамента (64K). Если затребован слишком большой блок, то DOS выдает
сообщение об ошибке. Любая возможность перекрытия блоков исключе- на. Кроме того MS DOS может освобождать, урезать или расширять существующие блоки. Хотя программа не обязана использовать эти средства, но удобно и предусмотрительно делать это. Некоторые функции DOS требуют, чтобы были использованы средства управления памятью DOS, например, завершение резидентной программы [1.3.4] или вызов другой программы из данной [1.3.2]. Прежде чем отвести память, существующий блок (вся память от начала программы до конца) должен быть обрезан до размера прог- раммы. Затем, при создании блока, DOS создает 16-байтный управ- ляющий блок памяти, который расположен непосредственно перед блоком памяти. Первые 5 байтов этого блока имеют следующее значе- ние: байты значение 0 ASCII 90 - если последний блок в цепочке, иначе ASCII 77. 1-2 0 если блок освобожден 3-4 размер блока в 16-байтных параграфах DOS обращается к блокам по цепочке. Адрес первого блока хра- нится во внутренней переменной. Значение этой переменной позво- ляет DOS определить положение первого отведенного блока, а из информации, содержащейся в нем, может быть найден следующий блок вать систему распределения памяти DOS, то Вы обязаны придержи- ваться ее. Если программа изменит содержимое управляющего блока, то цепочка будет разорвана и DOS начнет выдавать сообщения об ошибке. MS DOS обеспечивает три функции распределения памяти, номера от 48H до 4AH прерывания 21H. Функция 48H отводит блок памяти, а 49H - освобождает блок памяти. Третья функция ("SETBLOCK") ме- няет размер памяти, отведенной для программы; эта функция должна быть использована перед двумя остальными. После ее выполнения можно спокойно отводить и освобождать блоки памяти. Программа должна освободить все отведенные ею блоки перед завершением. Иначе эта память будет недоступной для последующего использова- ния. Средний уровень. Все три функции распределения памяти прерывания 21H используют 16-битный адрес начала блока памяти, с которым они оперируют. Этот адрес соответствует сегменту, с которого начинается блок (блок всегда начинается со смещения 0 данного сегмента). Таким образом реальный адрес ячейки начала блока равен этому адресу, умноженному на 16. Также, для всех трех функций, BX содержит число 16-байтных разделов памяти (параграфов), которые будут отводиться или освобождаться. Если функция не может быть выполне- |
|
|