Assembler - язык неограниченных возможностей


Интерфейс XMS


Спецификация доступа к дополнительной памяти (XMS) — еще один метод, позволяющий программам, запускающимся под управлением DOS в реальном режиме (или в режиме V86), использовать память, расположенную выше границы первого мегабайта.


INT 2Fh, АН = 43 — XMS- и DPMS-сервисы

Ввод: АХ = 4300h: проверить наличие XMS
Вывод: АН = 80h, если HIMEM.SYS или совместимый драйвер загружен
Ввод: АХ = 4310h: получить точку входа XMS
Вывод: ES:BX = дальний адрес точки входа XMS


После определения точки входа все функции XMS вызываются с помощью команды CALL на указанный дальний адрес.


Функция XMS 00h — Определить номер версии

Ввод: AH = 00h
Вывод: АХ = номер версии, не упакованный BCD (0300h для 3.0)
ВХ = внутренний номер модификации
DX = 1, если HMA существует, 0, если нет


Функция XMS 08h — Определить объем памяти

Ввод: АН = 08h
BL = 00h
Вывод: АХ = размер максимального доступного блока в килобайтах
DX = размер всей XMS-памяти в килобайтах
BL = код ошибки (A0h, если вся XMS-память занята, 00, если нет ошибок)


Так как возвращаемый размер памяти оказывается ограниченным размером слова (65 535 Кб), начиная с версии XMS 3.0, введена более точная функция 88h.


Функция XMS 88h — Определить объем памяти

Ввод: AH = 88h
Вывод: ЕАХ = размер максимального доступного блока в килобайтах
BL = код ошибки (A0h, если вся XMS-память занята, 00 — если нет ошибок)
ЕСХ = физический адрес последнего байта памяти (верный для ошибки А0h)
EDX = размер XMS-памяти всего в килобайтах (0 для ошибки А0h)


Функция XMS 09h — Выделить память

Ввод: АН = 09h
DX = размер запрашиваемого блока (в килобайтах)
Вывод: АХ = 1, если функция выполнена
ВХ = идентификатор блока
АХ = 0:
BL = код ошибки (A0h, если не хватило памяти)


Функция XMS 0Ah — Освободить память

Ввод: АН = 0Ah
DX = идентификатор блока
Вывод: АХ = 1, если функция выполнена
Иначе — АХ = 0 и BL = код ошибки (A2h — неправильный идентификатор, ABh — участок заблокирован)
<


Начало  Назад  Вперед