Копирование блоков EMB
На входе: AH = 0Bh.
DS:SI = указатель на управляющую структуру, определяющую откуда, куда и как будет выполняться копирование.
На выходе: AX = 0001h - если функция выполнена успешно 0000h - если произошла ошибка.
Ошибки: BL = 80h, 81h, 82h, A3h, A4h, A5h, A6h, A7h, A8h, A9h.
Управляющая структура:
ExtMemMoveStruct struc
Length dd ? ; количество пересылаемых байтов
SourceHandle dw ? ; индекс исходного блока SourceOffset dd ? ; смещение в исходном блоке
DestHandle dw ? ; индекс блока-назначения DestOffset dd ? ; смещение в блоке-назначении
ExtMemMoveStruct ends
Эта функция выполняет основную операцию с блоками EMB - копирование данных. Данные могут пересылаться между обычной памятью и блоками EMB, между различными блоками EMB и даже внутри обычной памяти.
Поле Length управляющей структуры указывает количество пересылаемых байтов. Это количество должно быть четным.
Поля SourceHandle и DestHandle указывают, соответственно, индексы исходного и результирующего блоков EMB. Если в качестве индекса задано значение 0000h, это означает, что в качестве источника или приемника данных используется обычная память.
Поля SourceOffset и DestOffset указывают 32-битовое смещение в блоке EMB или адрес в обычной памяти. В последнем случае этот адрес имеет стандартный формат сегмент:смещение.
Функция копирования сама управляет линией A20, восстанавливая ее состояние после выполнения копирования. Поэтому программе не требуется управлять линией A20.
Во время выполнения копирования разрешены прерывания.