Страница 4 из 19
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 ;неверная дата, идем на обработку ошибки
|