Переслать/обменять область памяти
11.5.15. Переслать/обменять область памяти
На входе: AH = 57h; AL = код подфункции: 0 - переслать область памяти; 1 - обменять область памяти; DS:SI = адрес структуры MoveInfo длиной 18 байтов. На выходе: AH = байт состояния EMM.
Функция предназначена для выполнения перемещения или обмена содержимого областей стандартной или дополнительной памяти. Возможно перекрытие исходной и результирующей областей памяти. Максимальный размер блоков, над которыми эта функция может выполнять операции - 1 мегабайт.
Структура MoveInfo содержит всю необходимую информацию о расположении блоков памяти:
Смещение Размер Описание
(+0) 4 Размер блока в байтах
(+4) 1 Тип исходной памяти: 0 - стандартная, 1 - EMS
(+5) 2 Индекс исходной памяти: 0 для стандартной памяти, индекс пула для EMS
(+7) 2 Смещение для исходной памяти (внутри сегмента или страницы)
(+9) 2 Адрес исходного сегмента или номер для исходной страницы
(+11) 1 Тип результирующей памяти: 0 - стандартная, 1 - EMS
(+12) 2 Индекс результирующей памяти: 0 для стандартной памяти, индекс пула для EMS
(+14) 2 Смещение для результирующей памяти (внутри сегмента или страницы)
(+16) 2 Адрес результирующего сегмента или номер для исходной страницы
Получить массив адресов отображения На входе: AH = 58h; AL = код подфункции: 0 - получить массив отображения; 1 - получить размер массива отображения; ES:DI = адрес буфера для массива отображения. На выходе: AH = байт состояния EMM; CX = количество элементов в массиве отображения (для подфункции 1)
Массив отображения, получаемый при помощи этой функции, состоит из 4-байтовых элементов. Первое слово элемента содержит адрес сегмента, второе - номер физической страницы, соответствующей этому адресу.