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 |
Ввод: | АХ = 0502h SI:DI = идентификатор блока |
Вывод: | CF = 0, если не было ошибки |
Ввод: | АХ = 0503h ВХ:СХ = новый размер в байтах SI:DI = идентификатор блока |
Вывод: | если CF = 0, ВХ:СХ = новый линейный адрес блока; SI:DI = новый идентификатор |
Ввод: | АХ = 0800h ВХ:СХ = физический адрес SI:DI = размер области в байтах |
Вывод: | если CF = 0, ВХ:СХ = линейный адрес, который можно использовать для доступа к этой памяти |
Ввод: | АХ = 0801h ВХ:СХ = линейный адрес, возвращенный функцией 0800h |
Вывод: | CF = 0, если не было ошибок |