Определение объема оперативной памяти



Методика определения объема памяти - такая же, как и определения списка оборудования. Объем ОЗУ (в Кбайтах) находится в области памяти BIOS по адресу 0040:0013 (2-байтное слово) и может быть получен при помощи прерывания 0x12, как это показано в следующем примере.

/*==             ПРИМЕР 3                   ==*/ /*======== Определение объема оперативной памяти =========*/ #include <dos.h> main() { union REGS rr; /* Прерывание 0x12 возвращает его в регистре AX */ int86(0x12,&rr,&rr); printf("Объем памяти по прерыванию 12 - %d Кбайт\n", rr.x.ax); /* То же число можно получить чтением из 0040:0012 */ printf("Объем памяти из данных BIOS - %d Кбайт\n", peek(0x40,0x13)); }

Для AT объем ОЗУ может быть также прочитан из регистров 0x15 (младший байт) и 0x16 (старший байт) CMOS-памяти. Кроме того, в AT может быть еще и расширенная (extended) память сверх 1 Мбайта (в AT она используется только для виртуальных дисков). Ее объем можно получить из регистров 0x17 (младший байт) и 0x18 (старший байт), или из регистров 0x30 (младший байт) и 0x31 (старший байт) или по функции 0x88 прерывания 0 x15.

/*==              ПРИМЕР 4                  ==*/ /*======= Определение характеристик памяти для AT ========*/ #include <dos.h> union REGS rr; main() { unsigned char f, f1; printf(" Объем основной памяти - "); outportb(0x70,0x15); f=inportb(0x71); outportb(0x70,0x16); f1=inportb(0x71); printf("%d Кбайт \n",(f1<<8)|f); printf(" Объем extended памяти - "); outportb(0x70,0x17); f=inportb(0x71); outportb(0x70,0x18); f1=inportb(0x71); printf("%d Кбайт \n",(f1<<8)|f); printf(" Объем extended памяти - "); outportb(0x70,0x30); f=inportb(0x71); outportb(0x70,0x31); f1=inportb(0x71); printf("%d Кбайт \n",(f1<<8)|f); printf(" Объем extended памяти - "); rr.h.ah=0x88; int86(0x15,&rr,&rr); printf("%d Кбайт \n",rr.x.ax); } }

Определение версии DOS

Эта операция необходима, так как средства и структуры данных DOS могут существенно меняться от версии к версии. Функция DOS 0x30 возвращает в регистре AL старшее число номера версии, а в AH - младшее число.

/*==                ПРИМЕР 5                ==*/ /*================ Определение версии DOS ================*/ #include <dos.h> union REGS rr; main() { rr.h.ah=0x30; intdos(&rr,&rr); printf(" Версия MS-DOS %d.%d\n",rr.h.al,rr.h.ah); }

 

Задание:  Составить программу проверки состава оборудования ПК

Порядок выполнения работы:

1. Ввести и откомпилировать приведенную выше программу.

2. Прокомментировать каждое предложение программы

 

Контрольные вопросы:

1. Назначение BIOS

2. По какому адресу BIOS формирует список оборудования ПК?

3. Как определить тип ПК?

 

 


Дата добавления: 2019-09-13; просмотров: 201; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!