Справочник программиста на персональном компьютере фирмы IBM. Таймеры и звук - Установка/чтение даты

ОГЛАВЛЕНИЕ

     2.1.3 Установка/чтение даты.


   При  включении  компьютера MS DOS  запрашивает у  пользователя
текущие  дату и время.  Время записывается в области данных BIOS.
Дата же содержится  в  переменной  в  COMMAND.COM. Она хранится в
формате трех последовательных байтов, которые содержат соответст-
венно день месяца, номер месяца  и номер года, начиная с 0, где 0
соответствует  1980 году.  В отличии от счетчика  времени  суток,
адрес даты в памяти меняется с изменением версии DOS и положением
в памяти COMMAND.COM.  По этой причине для получения даты  всегда
надо использовать готовые  утилиты Бейсика или MS DOS, а не обра-
щаться к этой переменной напрямую.
   Машины,  оборудованные микросхемой календаря-часов,  автомати-
чески устанавливают время и дату  с помощью специальной программы
(обычно  запускаемой  при старте через файл  AUTOEXEC.BAT).   Как
получить доступ к микросхеме календаря-часов,  см. [2.1.4]. Отме-
тим  также, что когда счетчик времени суток BIOS переходит  через
отметку 24 часов, MS DOS меняет дату.

   Высокий уровень.


   Оператор Бейсика DATE$ устанавливает  или получает дату в виде
строки  формата  ММ-ДД-ГГГГ.  Можно использовать косую черту  (/)
вместо дефиса (-).  Первые две цифры года могут быть опущены. Для
31-го октября 1984 г.:

   100 DATE$ = "10/31/84"     'установка даты
   110 PRINT DATE$            'вывод даты

   ... и на дисплее будет выведено: 10-31-1984.

   Средний уровень.


   Функции  2AH  и  2BH прерывания 21H  получают и  устанавливают
дату.  Для получения даты поместите в AH 2AH и выполните прерыва-
ние.   При возврате CX будет содержать год в виде числа  от 0  до
119, что соответствует  диапазону  лет 1980 - 2099 (можно сказать
что  выдается смещение относительно 1980 г.).  DH содержит  номер
месяца, а DL - день.

   MOV   AH,2AH       ;номер функции получения даты
   INT   21H          ;получение даты
   MOV   DAY,DL       ;день из DL
   MOV   MONTH,DH     ;месяц из DH
   ADD   CX,1980      ;добавляем базу к году
   MOV   YEAR,CX      ;получаем номер года

   Для установки даты поместите день, месяц и год в те же регист-
ры  и выполните функцию 2BH.  Если значения, указанные  для  даты
неверны, то в AL будет возвращено FF, в противном случае - 0.

   MOV   DL,DAY       ;помещаем день в DL
   MOV   DH,MONTH     ;помещаем месяц в DH
   MOV   CX,YEAR      ;помещаем год в CX
   SUB   CX,1980      ;берем смещение относительно 1980
   MOV   AH,2BH       ;номер функции установки даты
   INT   21H          ;установка даты
   CMP   AH,0FFH      ;проверяем успешность операции
   JE    ERROR        ;неверная дата, идем на обработку ошибки