Другие языки программирования и технологии

Системное время в TAsm и MAsm

Вообщем мне необходимо на TAsm'е или MAsm'е написать программу, которая бы выводила текущее системное время(аналог процедуры time в Си++). Я нашёл информацию, что это можно якобы сделать с помощью кода "int 16h", но этот код ничего не делает с временем, он лишь загружает шестнадцетиричное число "16" в регистр Ax в десятичной форме. Подскажите, как можно узнать через TAsm или MAsm текущее системное время в компьютере и как его можно изменить?
SB
Suren Bagdasaryan
886
4.7.1. Системный таймер
Начиная с IBM AT, персональные компьютеры содержат два устройства для управления процессами — часы реального времени (RTC) и собственно системный таймер. Часы реального времени получают питание от аккумулятора на материнской плате и работают даже тогда, когда компьютер выключен. Это устройство можно использовать для определения/установки текущих даты и времени, установки будильника с целью выполнения каких-либо действий и для вызова прерывания IRQ8 (INT 4Ah) каждую миллисекунду. Системный таймер используется одновременно для управления контроллером прямого доступа к памяти, для управления динамиком и как генератор импульсов, вызывающий прерывание IRQ0 (INT 8h) 18,2 раза в секунду. Таймер предоставляет богатые возможности для препрограммирования на уровне портов ввода-вывода, но на уровне DOS и BIOS и часы реального времени, и системный таймер используются только как средство определения/установки текущего времени и организации задержек.

Функция DOS 2Ch — Определить время

Ввод: AX = 2Ch
Вывод: СН = час
CL = минута
DH = секунда
DL = сотая доля секунды

Эта функция использует системный таймер, так что время изменяется только 18,2 раза в секунду и число в DL увеличивается сразу на 5 или 6.

Функция DOS 2Dh — Установить время

Ввод: АН = 2Dh
СН = час
CL = минута
DH = секунда
DL = сотая доля секунды
Вывод: AL = FFh, если введено несуществующее время,
AL = 00h, если время установлено

Функции 2Bh и 2Dh устанавливают одновременно как внутренние часы DOS, которые управляются системным таймером и обновляются 18,2 раза в секунду, так и часы реального времени. BIOS позволяет управлять часами напрямую:

INT 1Ah АН = 02h — Определить время RTC

Ввод: АН = 02h
Вывод: CF = 0, если время прочитано
СН = час (в формате BCD)
CL = минута (в формате BCD)
DH = секунда (в формате BCD)
DL = 01h, если действует летнее время, 00h, если нет
CF = 1, если часы не работают или попытка чтения пришлась на момент обновления

INT 1Ah АН = 03h — Установить время RTC

Ввод: АН = 03h
СН = час (в формате BCD)
CL = минута (в формате BCD)
DH = секунда (в формате BCD)
DL = 01h, если используется летнее время, 0 — если нет
Сергей В
Сергей В
4 331
Лучший ответ
Под ДОС и под Win это делается по-разному.
Для ДОС - см. пред. ответ.
Для Win32 - надо позвать ф-ции WinAPI GetLocalTime / SetLocalTime
Как это делать, рассказывать лень.