Область памяти от FFFFh:0010h (конец первого мегабайта) до FFFFh:FFFFh (конец адресного пространства в реальном режиме), 65 520 байт, может использоваться на компьютерах, начиная с 80286. Доступ к этой области осуществляется с помощью спецификации XMS, причем вся она выделяется целиком одной программе. Обычно, если загружен драйвер HIMEM.SYS и если в файле CONFIG.SYS присутствует строка DOS = HIGH, DOS занимает эту область, освобождая почти 64 Кб в основной памяти. При этом DOS может оставить небольшой участок HMA (16 Кб или меньше) для пользовательских программ, которые обращаются к нему с помощью недокументированной функции мультиплексора 4Ah.
INT 2Fh, AX= 4A01h — Определить размер доступной части HMA (DOS 5.0+)
Ввод: | АХ = 4A01h |
Вывод: | ВХ = размер доступной части HMA в байтах, 0000h, если DOS не в HMA ES:DI = адрес начала доступной части НМА (FFFFh:FFFFh, если DOS не в НМА) |
INT 2Fh, АХ= 4A02h — Выделить часть НМА (DOS 5.0+)
Ввод: | АХ = 4А02h ВХ = размер в байтах |
Вывод: | ES:DI = адрес начала выделенного блока ВХ = размер выделенного блока в байтах |
В версиях DOS 5.0 и 6.0 нет функций освобождения выделенных таким образом блоков НМА. В DOS 7.0 (Windows 95) выделение памяти в НМА было организовано аналогично выделению памяти в обычной памяти и UMB, с функциями изменения размера и освобождения блока.
INT 2Fh, АХ = 4A03h — Управление распределением памяти в НМА (DOS 7.0+)
Ввод: | АХ = 4A03h DL = 0 — выделить блок (ВХ = размер в байтах) DL = 1 — изменить размер блока (ES:DI = адрес, ВХ = размер) DL = 2 — освободить блок (ES:DI = адрес) СХ = сегментный адрес владельца блока |
Вывод: | DI = FFFFh, если не хватило памяти, ES:DI = адрес блока (при выделении) |
Следует помнить, что область НМА доступна для программ только в том случае, если адресная линия процессора А20 разблокирована. Если DOS не занимает НМА, она почти всегда заблокирована для совместимости с программами, написанными для процессора 8086/8088, которые считают, что адреса FFFFh:0010h — FFFFh:FFFFh всегда совпадают с 0000h:0000h — 0000h:FFEFh. Функции XMS 01 – 07 предоставляют возможность управления состоянием этой адресной линии. | |||