На входе: АН = 0Eh;
DX = 16-битовый индекс (handle) ЕМВ.
На выходе: АХ = 000lh - если функция выполнена успешно,
0000h - если произошла ошибка;
ВН = содержимое счетчика блокировок ЕМВ;
BL = количество свободных индексов ЕМВ в системе;
DX = размер блока в килобайтах.
Ошибки: BL = 80h, 81h, A2h.
Эта функция используется для получения различной информации об используемых блокахЕМВ. Линейный адрес блока может быть получен с помощью функции 0Ch.
Изменить размер ЕМВ
На входе: АН = 0Fh;
DX = 16-битовый индекс (handle) незаблокированногоЕМВ, размер которогодолжен быть изменен;
ВХ = новый размер ЕМВ в килобайтах.
На выходе: АХ = 000lh - если функция выполнена успешно,
0000h -если произошла ошибка.
Ошибки: BL = 80h, 81h, AOh, Alh, A2h, ABh.
Функция изменяет размер не заблокированного ЕМВ. Если блок уменьшается в размерах, данные в старших адресах блока будут потеряны.
Запросить область UMB
Навходе: AH = 10h.
DX = размер запрашиваемого блока UMB в параграфах;
На выходе: AX = 000lh - если функция выполнена успешно,
0000h -если произошла ошибка.
Ошибки: BL = 80h, B0h, B1h.
Эта функция позволяет программе получить доступ к блокам UMB, лежащим в пределах первого мегабайта адресного пространства. Для использования этих блоков не требуется управлять линией А20.
Если Вам надо определить размер доступной области UMB, задайте при вызове этой функции DX = FFFFh.
На входе: AH = 11h;
DX = сегмент освобождаемого UMB.
На выходе: AX = 000lh - если функция выполнена успешно,
0000h - если произошла ошибка.
Ошибки: BL = 80h, В2h.
После освобождения блока ЕМВ данные, которые там находились, будут потеряны.
3.4. Коды ошибок
Приведем таблицу кодов ошибок, возвращаемых функциями в регистре BL:
Код |
Ошибка |
00h 80h 81h 82h 8Eh 8Fh 90h 91h 92h 93h 94h A0h Alh A2h АЗh A4h A5h A6h A7h A8h A9h AAh ABh Ach ADh B0h Blh B2h |
Нет ошибки, нормальное завершение функция не реализована в текущей версии драйвера Обнаружен драйвер VDISK.SYS, сэтим драйвером драйвер HIMEM.SYS несовместим Ошибка при работе с линией А20 Общая ошибка драйвера Катастрофическая ошибка драйвера Область НМА не существует Область НМА уже используется Содержимое регистра DX меньше параметра /HMAMINОбласть НМА не распределена программе Линия А20 все еще разблокирована Вся расширенная память уже распределена Больше нет свободных индексов ЕМВ Неправильный индекс ЕМВ Неправильный SourceHanale Неправильный SourceOffset Неправильный DestKandle Неправильный DcstOffset Неправильный Length Неразрешенное перекрытие данных при выполнении операции пересылки данных Произошла ошибка четности ЕМВ не заблокирован ЕМВ заблокирован Переполнение счетчика блокировок ЕМВ He удалось выполнить блокировку ЕМВ Доступен UMB меньшего размера Нет доступных блоков UMB Задан неправильный сегмент UMB |
3.5. Ограничения при использовании области НМA
К сожалению, на программы, использующие область НМА, накладываются значительные ограничения. Они связаны с тем, что MS-DOS версий 4.01 и более ранних, а также BIOS не были рассчитана на работу с адресами памяти выше границы 1 мегабайт. Приведем список этих ограничений.
• Нельзя передавать MS-DOS FAR-указатели на данные, размещенные в области НМА, т. к. функцииMS-DOS проверяютправильность таких указателей.
• Не рекомендуется использование области НМА для выполнения обмена данных с диском через прерывания MS-DOS, BIOS или другими способами.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.