Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+Лабораторная№13 .doc
Скачиваний:
40
Добавлен:
27.10.2018
Размер:
138.24 Кб
Скачать

Відкрити індекс emm

На вході: AX = 4300h;

BX = потрібна в цьому пулі кількість

логічних сторінок.

На виході: AH = байт стану EMM;

DX = індекс пулу EMS, він використовуватиметься

у операціях з пулом логічних сторінок.

Ця функція дозволяє замовити пул логічних сторінок (тобто деяку сукупність логічних сторінок додаткової пам'яті). Отриманому пулу надається індекс (handle), який вказує на пул і використовується в усіх операціях з пулом.

/*

*.Name ems_open

*.Title Відкриття індексу пулу сторінок EMS

*.Descr Ця функція відкриває індекс пулу сторінок

* EMS, роблячи доступними логічні сторінки

* додатковій пам'яті.

*.Proto int ems_open(int n_pages, int *handle);

*.Params int n_pages - кількість необхідних логічних

* сторінок;

* int *handle - покажчик на слово, в яке

* буде записаний індекс отриманого пулу.

*.Return Байт стану драйвера EMS

*.Sample ems_test.c

*/

#include <stdio.h>

#include <dos.h>

#include "sysp.h"

int ems_open(int n_pages, int *handle){

union REGS reg;

reg.x.ax = 0x4300;

reg.x.bx = n_pages;

int86(0x67, &reg, &reg);

*handle = reg.x.dx;

return(reg.h.ah);

}

Відобразити пам'ять

На вході: AH = 44h;

AL = номер фізичної сторінки вікна доступу

(від 0 до 3);

BX = номер логічної сторінки з числа

сторінок (, що знаходяться в кулі, від 0 до n - 1,

де n - кількість логічних сторінок

у кулі);

для версії EMS 4.0 завдання значення

00FFFFh призводить до заборони відображення

фізичних сторінок пулу, для дозволу

їх відображення необхідно викликати цю

функцію ще раз, вказавши правильний

номер сторінки;

DX = індекс EMM, отриманий від функції 43h.

На виході: AH = байт стану EMM.

Функція виконує відображення (прив'язку) однієї з логічних сторінок пулу до одного їх чотирьох 16-кілобайтних сегментів вікна перегляду, тобто до фізичних сторінок.

/*

*.Name ems_map

*.Title Відобразити пам'ять EMS

*

*.Descr Ця функція відображує логічні сторінки

* пулу додаткової пам'яті на фізичні.

*.Proto int ems_map(int phys_page, int log_page

* int handle);

*.Params int phys_pages - номер фізичної сторінки

* вікна доступу (від 0 до 3), на яку необхідно

* відобразити логічну сторінку пулу;

* int_log_page - номер логічної сторінки пулу;

* int *handle - індекс отриманого пулу;

*.Return Байт стану драйвера EMS

*.Sample ems_test.c

*/

#include <stdio.h>

#include <dos.h>

#include "sysp.h"

int ems_map(int phys_page, int log_page, int handle){

union REGS reg;

reg.h.ah = 0x44;

reg.h.al = phys_page;

reg.x.bx = log_page;

reg.x.dx = handle;

int86(0x67, &reg, &reg);

return(reg.h.ah);

}