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

Способ формирования адресов памяти в реальном режиме процессора ограничивает используемое адресное пространство величиной в 1 Мб (адреса от 0 до FFFFFh). Использование памяти большего объема представляет определенную сложность даже на компьютерах с расширенной адресной шиной, так как DOS, являясь системой реального режима, не предоставляет для этого базовых сервисных средств. Впрочем, начиная с версии 4, в DOS включена поддержка спецификации так называемой дополнительной памяти — EMS (Expanded Memory Specification), дополняющей обычную память. В компьютерах на базе процессора 8086 (PC, XT) модули дополнительной памяти изначально устанавливались на специальной плате расширения компьютера, а в последующих компьютерах стало возможным использовать для организации дополнительной памяти обычные модули памяти на материнской плате.

Доступ к дополнительной памяти осуществляется с помощью страничного преобразования, выполняемого драйвером EMS. В соответствии с этим преобразованием в области верхних адресов памяти (UMA), начинающийся обычно с адреса D0000h, резервируется область размером 64 Кб (сегмент), называемая окном EMS. В окне размещены 4 страницы памяти размером 16 Кб, на которые в дальнейшем отображаются фрагменты дополнительной памяти (также размером по 16 Кб). Если часть памяти обработана, и требуется доступ к новому участку дополнительной памяти, программа вызывает функцию отображения, и драйвер EMS выполняет новое отображение требуемого участка на те же адреса UMA.

Из программы обращение к дополнительной памяти выполняется при помощи функций EMS, вызываемых через прерывание 67h. Вызывать функции EMS можно, только если в системе присутствует драйвер с именем ЕММХХХХ0 (EMS Manager). По умолчанию драйвер в большинстве случаев не загружается автоматически — его необходимо устанавливать вручную. Для про­верки присутствия драйвера в памяти можно, например, попытаться от­крыть с помощью функции 3Dh файл/устройство с именем ЕММХХХХ0. Если операция выполнилась успешно и в текущем каталоге нет файла с таким же именем именем, то драйвер EMS наверняка присутствует в системе (для более точного определения можно воспользоваться функцией 44h DOS управления устройствами ввода-вывода (IOCTL) и получить с ее помощью статус открытого устройства).

Основные функции EMS:

INT 67h, АН = 46h Получить номер версии

Ввод: АН = 46h

Вывод: АН = 0 и AL = номер версии в упакованном BCD-коде (40h для 4.0) Во всех случаях, если АН не ноль, произошла ошибка

INT 67h, АН = 41h Получить сегментный адрес окна

Ввод: АН = 41h

Вывод: АН = 0 и ВХ = сегментный адрес окна

INT 67h, АН = 42h Получить объем памяти

Ввод: АН = 42h

Вывод: АН = 0

DX = объем EMS-памяти в 16-килобайтных страницах

ВХ = объем свободной EMS-памяти в 16-килобайтных страницах

INT 67h, АН = 43h — Выделить идентификатор и EMS-память

Ввод: АН = 43h

ВХ = требуемое число 16-килобайтных страниц

Вывод: АН = 0, DX = идентификатор

Теперь указанный в этой функции набор страниц в EMS-памяти описывается как занятый и другие программы не смогут выделить его для себя.

INT 67h, АН = 44h — Отобразить память

Ввод: АН = 44h

AL = номер 16-килобайтной страницы в 64-килобайтном окне EMS (0 ‑ 3)

ВХ = номер 16-килобайтной страницы в EMS-памяти

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

Вывод: АН = 0

Теперь запись/чтение в указанную страницу в реальном адресном пространстве приведет к записи/чтению в указанную страницу в EMS-памяти.

INT 67h, АН = 45h — Освободить идентификатор и EMS-память

Ввод: АН = 45h

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

Вывод: АН = 0

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