Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
689.66 Кб
Скачать
      1. Интерфейс xms

Спецификация доступа к расширенной памяти (XMS — eXtended Memory Specification) — еще один механизм, позволяющий программам, запускающимся под управлением DOS в реальном режиме (или в режиме V86), использовать память, расположенную выше границы первого мегабайта.

С появлением 80286 появилась возможность устанавливать больше одного мегабайта памяти на одной материнской плате, и для работы с этой памятью была введена новая спецификация — XMS. Тогда же появились менеджеры памяти, эмулировавшие EMS поверх XMS, для совместимости со старыми программами, причем работа через EMS оказывалась значительно медленнее. Позже, когда в процессорах Intel появился механизм страничной адресации, оказалось, что теперь уже EMS можно реализовать значительно быстрее XMS. Тем не менее стандарт EMS со временем стал использоваться все реже. Некоторые же DOS-программы, которым требуется дополнительная память, поддерживают обе спецификации.

Для доступа к расширенной памяти в соответствии со стандартом XMS необходим XMS-драйвер (например, HIMEM.SYS), предоставляющий набор сервисных функций. В отличие от обычного способа вызова командой INT, эти функции вызываются с по­мощью команды CALL по определенному дальнему адресу, который является точкой входа XMS-сервисов. Точку входа необходимо получить с помощью функции 43h мультиплексного прерывания 2Fh:

INT 2Fh, AH=43h — XMS- и DPMS-сервисы

Ввод: AX = 4300h: проверить наличие XMS

Вывод: АН = 80h, если HIMEM.SYS или совместимый драйвер загружен

Ввод: АХ = 4310h: получить точку входа XMS

Вывод: ES:BX = дальний адрес точки входа XMS

Функция XMS 00h — Определить номер версии

Ввод: АН = 00h

Вывод: AX = номер версии в неупакованном BCD-коде (0300h для 3.0)

BХ = внутренний номер модификации

DX = 1, если область НМА существует, 0, если нет

Функция XMS 08h — Определить объем памяти

Ввод: АН = 08h

BL = 00h

Вывод: АХ = размер максимального доступного блока в килобайтах

DX = размер XMS-памяти всего в килобайтах

BL = код ошибки (A0h, если вся XMS-память занята, 00, если нет ошибок)

Так как возвращаемый размер памяти оказывается ограниченным размером слова (65 535 Кб), начиная с версии XMS 3.0, введена более точная функция 88h.

Функция XMS 88h — Определить объем памяти

Ввод: АН = 88h

Вывод: ЕАХ = размер максимального доступного блока в килобайтах

BL = код ошибки (A0h, если вся XMS-память занята, 00, если нет ошибок)

ЕСХ = физический адрес последнего байта памяти (верный для ошибки А0)

EDX = размер XMS-памяти всего в килобайтах (0 для ошибки А0)

Функция XMS 09h — Выделить память

Ввод: АН = 09h

DX = размер запрашиваемого блока (в килобайтах)

Вывод: АХ = 1, если функция выполнена

ВХ = идентификатор блока

АХ =0: BL = код ошибки (A0h, если не хватило памяти)

Функция XMS 0Ah — Освободить память

Ввод: АН = 0Ah

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

Вывод: AX = 1, если функция выполнена

Иначе — АХ = 0 и BL = код ошибки (A2h — неправильный идентификатор, ABh — участок заблокирован)

Функция 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).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]