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

         

Интерфейс EMS


Дополнительная память (EMS) — способ для программ, запускающихся в реальном режиме (или в режиме V86), обращаться к памяти, находящейся за пределами первого мегабайта. EMS позволяет отобразить сегмент памяти, начинающийся обычно с 0D000h, на любые участки памяти, аналогично тому, как осуществляется доступ к видеопамяти в SVGA-режимах. Вызывать функции EMS (прерывание 67h) можно, только если в системе присутствует драйвер с именем ЕММХХХХ0. Для проверки его существования можно, например, вызвать функцию 3Dh (открыть файл или устройство), причем на тот случай, если драйвер EMS отсутствует, а в текущей директории есть файл с именем ЕММХХХХ0, следует дополнительно вызвать функцию IOCTL — INT 21h с АХ = 4400h и ВХ = идентификатор файла или устройства, полученный от функции 3Dh. Если значение бита 7 в DX после вызова этой функции 1, то драйвер EMS наверняка присутствует в системе.

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

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

Ввод: AH = 46h
Вывод: АН = 0 и AL = номер версии в упакованном BCD (40h для 4.0)



Во всех случаях, если АН не ноль, произошла ошибка.

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

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

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

Ввод: AH = 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
<
/p> Теперь запись/чтение в указанную страницу в реальном адресном пространстве приведет к записи/чтению в указанную страницу в EMS-памяти.

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

Ввод: АН = 45h
DX = идентификатор
Вывод: АH = 00h
Спецификация EMS была разработана для компьютеров IBM XT, снабжавшихся специальной платой, на которой и находилась дополнительная память. С появлением процессора 80286 появилась возможность устанавливать больше одного мегабайта памяти на материнской плате и для работы с ней была введена новая спецификация — XMS. Тогда же появились менеджеры памяти, эмулировавшие EMS поверх XMS, для совместимости со старыми программами, причем работа через EMS оказывалась значительно медленнее. Позже, когда в процессорах Intel появился механизм страничной адресации, оказалось, что теперь уже EMS можно реализовать значительно быстрее XMS. Большинство программ для DOS, которым требуется дополнительная память, поддерживают обе спецификации.


Содержание раздела







Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий