Определение объема оперативной памяти
Методика определения объема памяти - такая же, как и определения списка оборудования. Объем ОЗУ (в Кбайтах) находится в области памяти 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!