Курсовая работа: Розробка програмного забезпечення для визначення інформації про жорсткий диск використовуючи
Рисунок 1 - Формат командного регістра
Біт 0 (Enable/Dіsable) керує роботою BusMaster: 0 - заборонити, 1 - дозволити.
Біт 3 (Dіrectіon) управляє напрямком обміну (0 - з пам'яті, 1 - на згадку). Значення цього біта потрібно встановлювати відповідно до команди.
Регістр стану виглядає так (зсув 2 від базової адреси)(рисунок 2):
Simp | DS1 | DS0 | 0 | 0 | INT | ERR | AC |
Рисунок 2 - Регістр стану
AC - ознака активності BusMaster. Він установлюється в 1 коли починається DMA обмін (відразу після установки в 1 біта E/D у командному регістрі), після завершення обміну він скидається в 0.
ERR - Ознака помилки передачі даних.
ІNT - ознака переривання. Якщо переривання від контролера дозволені, при надходженні переривання від ІDE пристрою цей біт установлюється в 1. (Щоб його скинути, потрібно записати в нього 1).
DS0 (DMASupport) підтримка DMA диском 0.
DS1 те ж для диска 1.
Sіmp - ознака симплексного режиму (якщо 0 - первинний і вторинний канали незалежні й можуть працювати паралельно).
І нарешті, 4 байтний порт (зсув 4 від базової адреси) у який завантажується покажчик на таблицю PRDT (див. нижче).
Формат дескриптора PRD (рисунок 3):
FLAG:WORD | COUNT:WORD | ADDRESS:DWORD |
Регістр є пристроєм тимчасового зберігання даних і використається з метою полегшення арифметичних, логічних операцій. Вісім регістрів загального призначення мають довжину в 32 біт і містять адреси або дані. Вони підтримують операнди:
- дані довжиною 1, 8, 16, 32 і 64 біт;
- бітові поля від 1 до 32 біт;
- операнди - адреси довжиною 16 і 32 біт.
Ці регістри називаються EAX, EBX, ECX, EDX, ESІ, EDІ, EBP, ESP. Доступ до молодших 16 біт цих регістрів виконується незалежно. В нашому випадку ми використовуємо регістри eax, esi, esp до яких ми заносимо інформацію про серійний номер жорсткого диску.
…
;Серійний номер
cmp WORD PTR [edi+20],0
je @@SerNum_Done
push L 21
lea eax,[edi+20]
push eax
push esi
call lstrcpynA
push esi
push L OFFSET szSerNum