Справочник программиста на персональном компьютере фирмы 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 ;неверная дата, идем на обработку ошибки