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


Пример 3



Пример 3

/*== ПРИМЕР 6.2 ==*/ /*=========== Системная служба времени =============*/ #include <dos.h>

main() { union REGS rr; printf("память BIOS int 1A DOS-2C\n"); /* Окончание - по клавише Esc */ while (getch()!=27) { /* Получение счетчика времени из области памяти BIOS */ printf(" %04x %04x ",peek(0x40,0x6e),peek(0x40,0x6c)); /* Получение счетчика времени из прерывания 1A */ rr.h.ah=0; int86(0x1a,&rr,&rr); printf(" %04x %04x ",rr.x.cx,rr.x.dx); /* Получение форматированного времени из функции DOS */ rr.h.ah=0x2c; intdos(&rr,&rr); printf(" %02d:%02d:%02d.%02d\n", rr.h.ch,rr.h.cl,rr.h.dh,rr.h.dl); } }

При загрузке система запрашивает у оператора также текущую дату, которая сохраняется где-то в DOS. Доступ к дате обеспечивается функциями DOS 0x2A - чтение и 0x2B - установка (регистры: CX - год, DH - месяц, DL - число). Всякий раз, когда счетчик времени суток в области данных BIOS достигает значения, соответствующего 24 часам, он сбрасывается в 0, и устанавливает в 1 флаг наращивания даты - 1 байт по адресу 0040:0070. При запросе даты DOS анализирует этот флаг и, если он установлен, наращивает дату и сбрасывает флаг. В программном примере 6.3 мы при помощи функции 0x2A получаем текущую дату и запоминаем ее. Затем записываем 1 во флаг наращивания даты. Можно убедиться, нажимая любую клавишу, кроме Esc, что пока нет запроса даты, флаг остается взведенным. Затем вновь выдаем запрос и получим модифицированную дату и нулевой флаг. Наконец, при помощи функции 0x2B исправляем то, что мы наделали - восстанавливаем дату.




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