Системное программное обеспечение персональных ЭВМ


Схема 1



Схема 1




Рисунок 4.1 Распределение адресного пространства ПЭВМ
(все адреса шестнадцатиричные).

Адреса c 0000:0000 по 0000:03FF (1 Кбайт) занимает таблица векторов прерываний. Отметим, что векторы могут содержать адреса программ-обработчиков, адреса таблиц данных или быть свободными. По спецификациям DOS вектора с номерами от 0x60 по 0x67 свободны и могут заниматься программами пользователей. Однако, если пользователю необходимо использовать собственное прерывание, ему нельзя выбрать любой вектор из указанного диапазона без проверки. В этот момент в памяти ПЭВМ могут находиться какие-то резидентные программы (например, драйверы-русификаторы), которые могут использовать эти же вектора. Свободные векторы (а они могут найтись и вне специфицированной области) найти легко: эти векторы содержат нулевые адреса или константу NULL Турбо-Си.

Программа, приведенная ниже, выводит на экран таблицу векторов прерываний и определяет свободные векторы. Впоследствии мы укажем путь создания более совершенного варианта такой программы.

/*= ПРИМЕР 4.1. =*/ /*============= Анализ таблицы векторов =============*/ #include <dos.h> #include <stdlib.h> void *readvect(int in); main() { void far *vect; /* вектор */ int intnum; /* номер прерывания */ int line, i; for (clrscr(),intnum=line=0; intnum<l;256; intnum++) { for (i=0;i<17;i+=16) { vect=readvect(intnum+i); printf("INT %02Xh - %Fp - ",intnum+i,vect); if (vect==NULL) printf("%-16s","Свободен"); else printf("%-16s","Занят"); } if (i) { printf("\n"); if (++line>15) { intnum+=16; line=0; getch(); clrscr(); } } } } /*==== Получение вектора ====*/ void *readvect(int in) { union REGS rr; struct SREGS sr; rr.h.ah=0x35; rr.h.al=in; intdosx(&rr,&rr,&sr); return(MK_FP(sr.es,rr.x.bx)); }

Адреса с 0040:0000 по 0040:00FF (256 байт) называются областью памяти BIOS. В некоторых описаниях - областью памяти ROM BIOS. Приставка ROM (Read Only Memory, т.е. ПЗУ) говорит не о том, что эта память защищена от чтения, а о том, что данные в этой области используются программами, находящимися в ПЗУ.


- Начало -  - Назад -  - Вперед -