Другие языки программирования и технологии
Системное время в TAsm и MAsm
Вообщем мне необходимо на TAsm'е или MAsm'е написать программу, которая бы выводила текущее системное время(аналог процедуры time в Си++). Я нашёл информацию, что это можно якобы сделать с помощью кода "int 16h", но этот код ничего не делает с временем, он лишь загружает шестнадцетиричное число "16" в регистр Ax в десятичной форме. Подскажите, как можно узнать через TAsm или MAsm текущее системное время в компьютере и как его можно изменить?
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 — если нет
Начиная с 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 — если нет
Под ДОС и под Win это делается по-разному.
Для ДОС - см. пред. ответ.
Для Win32 - надо позвать ф-ции WinAPI GetLocalTime / SetLocalTime
Как это делать, рассказывать лень.
Для ДОС - см. пред. ответ.
Для Win32 - надо позвать ф-ции WinAPI GetLocalTime / SetLocalTime
Как это делать, рассказывать лень.
Похожие вопросы
- Какова точность системного времени
- А почему программы написанные на C/C#/C++ имеют больший вес чем на tasm/masm?
- Как реализовать рекурсию на языке ассемблера? (intel 80х86, masm, tasm или fasm)
- Visual Studio или MASM
- Помогите с задачкой на MASM-е
- Строки ассемблер нужно заполнить строку (10) рандомными символами. (MASM) как? помогите!
- Assembler,MASM! Лаб. Работа. #Помощь#Срочно
- TASM. В какой части кода объявляются структуры в язяке ASSEMBLER?
- Факториал tasm. Нужно вычислить факториал (не меньше 300!) и вывести результат на дисплей. Заранее спасибо.
- Очень нужна помощь....Асемблер(tasm)