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


Управление памятью в DPMI


INT 31h, AX = 0100h — Выделить память ниже границы 1 Мб

Ввод: АХ = 0100h
ВХ = требуемый размер в 16-байтных параграфах
Вывод: если CF = 0,
АХ = сегментный адрес выделенного блока для использования в реальном режиме;
DX = селектор выделенного блока для применения в защищенном режиме


Обработчик этой функции выходит в V86 и вызывает функцию DOS 48h для выделения области памяти, которую потом можно использовать для передачи данных между нашей программой и обработчиками прерываний, возвращающими структуры данных в памяти.


INT 31h, АХ = 0101h — Освободить память ниже границы 1 Мб

Ввод: АХ = 0101h
DX = селектор освобождаемого блока
Вывод: CF = 0, если не было ошибок


INT 31h, АХ = 0102h — Изменить размер блока, выделенного функцией 0100h

Ввод: АХ = 0102h
ВХ = новый размер блока в 16-байтных параграфах
DX = селектор модифицируемого блока
Вывод: CF = 0, если не было ошибок


INT 31h, АХ = 0500h — Получить информацию о свободной памяти

Ввод: АХ = 0500h
ES:EDI = адрес 48-байтного буфера
Вывод: CF = 0 всегда, буфер заполняется следующей структурой данных:

    +00h: 4 байта — максимальный доступный блок в байтах

    +04h: 4 байта — число доступных нефиксированных страниц

    +08h: 4 байта — число доступных фиксированных страниц

    +0Ch: 4 байта — линейный размер адресного пространства в страницах

    +10h: 4 байта — общее число нефиксированных страниц

    +14h: 4 байта — общее число свободных страниц

    +18h: 4 байта — общее число физических страниц

    +1Ch: 4 байта — свободное место в линейном адресном пространстве

    +20h: 4 байта — размер swap-файла или раздела в страницах

    +24h: 0Ch байт — все байты равны FFh


INT 31h, AX = 0501h — Выделить блок памяти

Ввод: АХ = 0501h
ВХ:СХ = размер блока в байтах, больше нуля
Вывод: если CF = 0,
ВХ:СХ = линейный адрес блока;
SI:DI = идентификатор блока для функций 0502 и 0503
<


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