временные интервалы
Я в принципе не понимаю как это делать можно, ведь если я какой-нибудь цикл вставлю, то он на разных компах с разной скоростью выполняться будет и за разное время соответственно!
Объясните мне,кто знает...
Заранее благодарен!
У меня такой вопрос: как проги производят какие-либо операции через определённые интервалы времени? (напр.: Прочитал в книге по асму: DOS обращается к системным часам только при загрузке, а дальше сама секунды отсчитывает.)
Я в принципе не понимаю как это делать можно, ведь если я какой-нибудь цикл вставлю, то он на разных компах с разной скоростью выполняться будет и за разное время соответственно!
Объясните мне,кто знает...
Заранее благодарен!
Привет Предатор...
А с чего ты это в АСМЪ углубился....? :)
Давай разъясним обстановку....
Могу предположить, что:
ДОС обращается к системным часам....
После чего использует аппаратный таймер....
(ох давно это было... давно...)
как он там?
То есть возможно там где ты это прочитал имеется ввиду, что ДОС сама считает время...
Да...., но считает она с помощью таймера, который тикает с заданной в него частатой...
Вот так...
Привет Предатор...
А с чего ты это в АСМЪ углубился....? :)
Давай разъясним обстановку....
Могу предположить, что:
ДОС обращается к системным часам....
После чего использует аппаратный таймер....
(ох давно это было... давно...)
как он там?
То есть возможно там где ты это прочитал имеется ввиду, что ДОС сама считает время...
Да...., но считает она с помощью таймера, который тикает с заданной в него частатой...
Вот так...
Я и имел ввиду, что дос после обращения к системным часам(аппаратному таймеру) она сама время считает...Вот что написано в книге:
"Во всех компьютерах, использующих процессоры 80286 и более поздние версии, применяются часы реального времени, которые отсчитывают время и дату даже тогда, когда компьютер выключен. DOS считывает время в момент запуска системы и затем продолжает отсчет даты и времени, не обращаясь к часам. Если компьютер остается включенным достаточно долго, то возможно расхождение между системным временем и часами реального времени."
(Кип Р. Ирвин "Язык ассемблера для прроцессоров intel третье издание")
Так вот, как она "продолжает отсчет даты и времени, не обращаясь к часам"???
Надо под винду лезть...
Это зависит от того какая точность требуется и как быстро реагировать на события... Если например это что-то в районе секунд, то просто можно считывать виндовское системное время и следить за событиями... Вариант дохлый... Погрешность в секунду, плюс ещё на реакцию.
В мастдаях более хороший вариант это на VxD уровне считывать время по тикам, там один тик составляет 1/(большое число) секунд (точное отношение не помню). На VxD уровне так же можно неплохо отработать событие по быстроте реакции... При использовании данного методя для генерации секундного импульса на ногу ЛПТ порта составила что-то вроде 0.0005 процента...
Смотря что хотеть от этой жизни и для чего это надо...
Про дос лучше уже забыть...
Надо под винду лезть...
Чушь.
Касательно ДОСА и времени:
При загрузке ДОС вешает на прерывание, происходящее с определённой (регулируемой) частотой. Это дело отображается в определённых ячейках памяти. Сорри, чисел не помню, посмотри в хелпах.
У меня такой вопрос: как проги производят какие-либо операции через определённые интервалы времени? (напр.: Прочитал в книге по асму: DOS обращается к системным часам только при загрузке, а дальше сама секунды отсчитывает.)
Я в принципе не понимаю как это делать можно, ведь если я какой-нибудь цикл вставлю, то он на разных компах с разной скоростью выполняться будет и за разное время соответственно!
Объясните мне,кто знает...
Заранее благодарен!
Ну .. начьнём с корня: им являеться irq0 поступающий от системы на i8295A (контроллер прерываний) с (если мене не изменяет память)f=18.2Hz . По умолчанию, этот irq кореспондирует с прерыванием 08h (можно изменить средством ICW2). Обработчик этого прерывания (08h) естественно системный. Иными словами - система 18.2 раза в sec генерит прерывание 08h, обработчик которого в свою очередь выполняет два, для нас интерессных действия. А именно:
1. генерит прерывание 1Ch, которое по умолчанию содержит только iret
2. нарасщевает двойное слово (dword) по абсолютному адрессу 0046Ch, значение которого можно определить напремую, илиже средством прерывания 1Ah
Тоесть реализовать интервалы в DOSe можно написав собственний обработчик прерывания 1Ch (не забывай про другие TSR! ), илиже оперируя со счётчиком в сегменте переменных BIOSа.
Успехов !