Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
54
Добавлен:
03.06.2014
Размер:
2.63 Mб
Скачать

Освободить блок emb

Регистры на входе:

AH = 0Ah

DX = идентификатор освобождаемого блока EMB

Регистры на выходе:

AX = 0001h - если функция выполнена успешно, 0000h - если произошла ошибка

Ошибки:

BL = 80h, 81h, A2h, B2h

Функция освобождает блок EMB, заказанный предыдущей функцией. При этом все данные, находившиеся в блоке, будут потеряны.

Копирование блоков 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.

Во время выполнения копирования разрешены прерывания.

Блокирование emb

Регистры на входе:

AH = 0Ch

DX = идентификатор блока EMB

Регистры на выходе:

AX = 0001h - если функция выполнена успешно, 0000h - если произошла ошибка;

DX:BX = 32-разрядный линейный адрес заблокированного EMB

Ошибки:

BL = 80h, 81h, A2h, ACh, ADh

Функция блокирует EMB и возвращает его базовый адрес как линейный 32-разрядный адрес. Для заблокированного EMB невозможно выполнить операцию копирования. Полученный линейный адрес действителен только для заблокированного EMB.

Разблокирование emb

Регистры на входе:

AH = 0Dh

DX = идентификатор блока EMB

Регистры на выходе:

AX = 0001h - если функция выполнена успешно, 0000h - если произошла ошибка

Ошибки:

BL = 80h, 81h, A2h, AAh

Функция разблокирует EMB, заблокированный при вызове предыдущей функции. Полученный от нее линейный адрес становится недействительным.

Соседние файлы в папке несколько программ