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


Интерфейс XMS - часть 2


/p>


Функция XMS 0Bh — Пересылка данных

Ввод: АН = 0Bh
DS:SI = адрес структуры для пересылки памяти
Вывод: АХ = 1, если функция выполнена
Иначе — АХ = 0 и BL = код ошибки


Структура данных, адрес которой передается в DS:SI:

    +00h: 4 байта — число байт для пересылки

    +04h: слово — идентификатор источника (0 для обычной памяти)

    +06h: 4 байта — смещение в блоке-источнике или адрес в памяти

    +0Ah: слово — идентификатор приемника (0 для обычной памяти)

    +0Ch: 4 байта — смещение в блоке-приемнике или адрес в памяти

Адреса в обычной памяти записываются в соответствующие двойные слова в обычном виде — сегмент:смещение. Копирование происходит быстрее, если данные выровнены на границы слова или двойного слова; если области данных перекрываются, адрес начала источника должен быть меньше адреса начала приемника.


Функция XMS 0Fh — Изменить размер XMS-блока

Ввод: АН = 0Fh
ВХ = новый размер
DX = идентификатор блока
Вывод: АХ = 1, если функция выполнена
Иначе — АХ = 0 и BL = код ошибки


Кроме того, XMS позволяет программам использовать область НМА и блоки UMB, если они не заняты DOS при запуске (так как в CONFIG.SYS не было строк DOS = HIGH или DOS = UMB).

; mem.asm ; сообщает размер памяти, доступной через EMS и XMS ; .model tiny .code .186 ; для команд сдвига на 4 org 100h ; СОМ-программа start: cld ; команды строковой обработки ; будут выполняться вперед

; проверка наличия EMS

mov dx,offset ems_driver ; адрес ASCIZ-строки "EMMXXXX0" mov ax,3D00h int 21h ; открыть файл или устройство jc no_emmx ; если не удалось открыть - EMS нет mov bx,ax ; идентификатор в ВХ mov ax,4400h int 21h ; IOCTL: проверить состояние файла/устройства jc no_ems ; если не произошла ошибка, test dx,80h ; проверить старший бит DX, jz no_ems ; если он - 0, EMMXXXXO - файл в текущем ; каталоге

; определение версии EMS




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