Во второй части второго тома "Библиотеки системного программиста" (глава 11) мы рассказывали вам о дополнительной памяти и об использовании для работы с ней спецификации EMS - Expanded Memory Specification.
Драйверы дополнительной памяти предоставляют программам интерфейс прерывания INT 67h, который мы тогда подробно описали. Мы также говорили о том, что для компьютеров на базе процессоров i80386 или i80486 существуют драйверы памяти, эмулирующие дополнительную память с использованием расширенной. Самые известные драйверы такого типа - EMM386.SYS и QEMM.SYS.
Эти драйверы используют защищённый (точнее, виртуальный) режим работы процессора i80386 и страничную адресацию расширенной памяти. Для прикладных программ предоставляется интерфейс, который называется VCPI - Virtual Programm Control Interface. Этот интерфейс реализован как подфункции функции DEh прерывания INT 67h:
Таблица 9. Функции интерфейса VCPI.
Подфункция | Выполняемые действия |
00 | Проверить наличие в системе интерфейса VCPI. |
01 | Получить адрес точки входа для работы с интерфейсом VCPI. |
02 | Определить максимальный физический адрес памяти. |
03 | Определить количество свободных страниц памяти размером 4 килобайта. |
04 | Получить страницу памяти. |
05 | Освободить страницу памяти. |
06 | Получить физический адрес страницы памяти, располагающейся в пределах первого мегабайта, т.е. в стандартной памяти. |
07 | Прочитать содержимое системного регистра CR0. |
08 | Прочитать содержимое отладочных регистров. |
09 | Установить отладочные регистры. |
0A | Получить отображение векторов прерываний, используемых контроллерами прерываний 8259. |
0B | Установить отображение векторов прерываний, используемых контроллерами прерываний 8259. |
0C | Переключить процессор из реального в защищённый режим, а также из защищённого в виртуальный режим. |
Перед вызовом прерывания INT 67h регистр AH должен содержать DEh, а номер требуемой подфункции должен быть загружен в регистр AL. Кроме того, прежде чем вызывать прерывание INT 67h, в самом начале работы программы необходимо убедиться в том, что в системе установлен драйвер EMS.