4.9.3. Область памяти НМА

Область памяти от OFFFFh:0010h (конец первого мегабайта) до OFFFFh:OFFFFh (конец адресного пространства в реальном режиме), 65 520 байт, может исполь­зоваться на компьютерах, начиная с 80286. Доступ к этой области осуществля­ется с помощью спецификации XMS, причем вся она выделяется целиком од­ной программе. Обычно, если загружен драйвер HIMEM.SYS и если в файле CONFIG.SYS присутствует строка DOS = HIGH, DOS занимает эту область, осво­бождая почти 64 Кб в основной памяти. При этом ОС может оставить небольшой участок HM^16 Кб или меньше) для пользовательских программ, которые обра­щаются к нему с помощью недокументированной функции мультиплексора 4Ah.

INT2Fh, AX= 4A01h: Определить размер доступной части HMА (DOS 5.0+) Вход:    АХ = 4A01h

Выход:  ВХ = размер доступной части HMА в байтах, OOOOh, если DOS не в HMА ES:DI = адрес начала доступной части HMА (OFFFFh:OFFFFh, если DOS не в HMА)

INT2Fh,AX = 4A02h: Выделить часть НМА (DOS 5.0+) Вход:    АХ = 4A02h

ВХ = размер в байтах

Выход:  ES:DI = адрес начала выделенного блока ВХ - размер выделенного блока в байтах

В версиях DOS 5.0 и 6.0 нет функций освобождения выделенных таким обра­зом блоков НМА. В DOS 7.0 (Windows 95) выделение памяти в НМЛ было орга­низовано аналогично выделению памяти в обычной памяти и UMB, с функциями

изменения размера и освобождения блока.

INT2Fh, АХ = 4A03h.Управление распределением памяти в НМА (DOS 7.0+)

Вход:    АХ = 4A03h

DL = 0 - выделить блок (ВХ = размер в байтах)

DL = 1 - изменить размер блока (ES:DI = адрес, ВХ = размер)

DL = 2 - освободить блок (ES:DI = адрес)

СХ - сегментный адрес владельца блока

Выход:  DI = OFFFFh, если не хватило памяти, ES:DI = адрес блока (при выде­лении)

 

Следует помнить, что областьНМАдоступна для программ только в том случае, когда адресная линия процессора А20 разблокирована. Если DOS не занимает НМА, она практически постоянно заблокирована на совмести­мость с программами, написанными для процессора 8086/8088, которые считают, что адреса OFFFFh:00Wh - OFFFFh:0FFFFhecezda совпадают c0000h:0000h - 0000h:0FFEFh. Функции XMS 01-07 позволяют управлять состоянием этой адресной линии.