и не такти, гарантується лише, що лічильник буде монотонно зростати) ми будемо визначати частоту процесора використовуючи саме цей лічильник. Лічильник тактів має розрядність 64 біта і збільшується на 1 з кожним тактом процесора, починаючи з сигналу RESET #. Він продовжує рахунок при виконанні інструкції HLT (власне при виконанні цієї інструкції процесор зовсім не зупиняється, а всього-навсього безперервно виконує інструкцію NOP, яка, у свою чергу, є закамуфльованій інструкцією XCHG АХ, АХ (опкод NOP - 10010000b, опкод XCHG AX, reg - 10010reg, що при використанні регістра АХ (000) дає 10010000b, цікаво, що фактично існує 32 - розрядний аналог NOP-a - XCHG Еах, Еах, на кодову послідовність 66h, 90h процесор реагує нормально). Зчитування лічильника тактів можна заборонити для прикладних програм (CPL = 3) установкою в 1 біта TSD в CR4 (у win зчитування заборонено). Після виконання інструкції RDTSC (якщо відбуватися помилка компіляції - db 0fh, 031h) регістри EDX: EAX містять поточне значення лічильника. Вимірювання частоти за допомогою RDTSC відбувається наступним чином:
. Маскуються всі переривання, крім таймерного.
. Робиться HLT.
. Зчитується і зберігається значення лічильника.
. Знову робиться HLT.
. Зчитується значення лічильника.
Різниця значень, лічених у пунктах 3 і 5, тобто кількість тактів за 1 тик таймера (частота переривань таймера приблизно 18,2 Гц).
Для більшої наочності уявімо дії на тимчасовій діаграмі:
В
Рисунок 1 - Тимчасова діаграма
Момент запуску програми позначений як t0, штрихи на осі - моменти, коли відбувається переривання від таймера. Перший HLT потрібен для того щоб подолати час t1, яке невідомо заздалегідь, так як програма може бути запущена в довільний час. Потім, у момент між t1 і t2 зчитується значення лічильника, воно зберігається і знову робиться HLT, процесор буде простоювати до першого переривання, тобто практично рівно період t2, який і дорівнює періоду переривань від таймера. Таким чином, при відомому значенні періоду таймера 18,2 Гц, а також кількості тактів за цей період можна дізнатися точну тактову частоту. br/>
2. Оперативна пам'ять
.1 Методи визначення обсягу оперативної пам'яті
Перерахуємо функції BIOS для визначення оперативної пам'яті:
int 12h - отримати розмір базової пам'яті в кб (640 кб). Вхідних параметрів не має. p align="justify"> На виході:
- АХ - кількість пам'яті.
Функція 88h переривання INT 15h повідомляє обсяг наявної оперативної ...