Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

временные интервалы

2.1K
13 декабря 2002 года
Predator
7 / / 27.10.2002
У меня такой вопрос: как проги производят какие-либо операции через определённые интервалы времени? (напр.: Прочитал в книге по асму: DOS обращается к системным часам только при загрузке, а дальше сама секунды отсчитывает.)
Я в принципе не понимаю как это делать можно, ведь если я какой-нибудь цикл вставлю, то он на разных компах с разной скоростью выполняться будет и за разное время соответственно!

Объясните мне,кто знает...
Заранее благодарен!
467
13 декабря 2002 года
Edmond
72 / / 20.05.2000
Цитата:
Originally posted by Predator
У меня такой вопрос: как проги производят какие-либо операции через определённые интервалы времени? (напр.: Прочитал в книге по асму: DOS обращается к системным часам только при загрузке, а дальше сама секунды отсчитывает.)
Я в принципе не понимаю как это делать можно, ведь если я какой-нибудь цикл вставлю, то он на разных компах с разной скоростью выполняться будет и за разное время соответственно!

Объясните мне,кто знает...
Заранее благодарен!



Привет Предатор...
А с чего ты это в АСМЪ углубился....? :)

Давай разъясним обстановку....

Могу предположить, что:

ДОС обращается к системным часам....
После чего использует аппаратный таймер....
(ох давно это было... давно...)
как он там?

То есть возможно там где ты это прочитал имеется ввиду, что ДОС сама считает время...

Да...., но считает она с помощью таймера, который тикает с заданной в него частатой...

Вот так...

2.1K
14 декабря 2002 года
Predator
7 / / 27.10.2002
Цитата:
Originally posted by Edmond


Привет Предатор...
А с чего ты это в АСМЪ углубился....? :)

Давай разъясним обстановку....

Могу предположить, что:

ДОС обращается к системным часам....
После чего использует аппаратный таймер....
(ох давно это было... давно...)
как он там?

То есть возможно там где ты это прочитал имеется ввиду, что ДОС сама считает время...

Да...., но считает она с помощью таймера, который тикает с заданной в него частатой...

Вот так...



Я и имел ввиду, что дос после обращения к системным часам(аппаратному таймеру) она сама время считает...Вот что написано в книге:

"Во всех компьютерах, использующих процессоры 80286 и более поздние версии, применяются часы реального времени, которые отсчитывают время и дату даже тогда, когда компьютер выключен. DOS считывает время в момент запуска системы и затем продолжает отсчет даты и времени, не обращаясь к часам. Если компьютер остается включенным достаточно долго, то возможно расхождение между системным временем и часами реального времени."
(Кип Р. Ирвин "Язык ассемблера для прроцессоров intel третье издание")

Так вот, как она "продолжает отсчет даты и времени, не обращаясь к часам"???

624
14 декабря 2002 года
HollyBlood
44 / / 20.06.2000
Про дос лучше уже забыть...
Надо под винду лезть...

Это зависит от того какая точность требуется и как быстро реагировать на события... Если например это что-то в районе секунд, то просто можно считывать виндовское системное время и следить за событиями... Вариант дохлый... Погрешность в секунду, плюс ещё на реакцию.
В мастдаях более хороший вариант это на VxD уровне считывать время по тикам, там один тик составляет 1/(большое число) секунд (точное отношение не помню). На VxD уровне так же можно неплохо отработать событие по быстроте реакции... При использовании данного методя для генерации секундного импульса на ногу ЛПТ порта составила что-то вроде 0.0005 процента...
Смотря что хотеть от этой жизни и для чего это надо...
525
15 декабря 2002 года
December
82 / / 20.08.2000
Цитата:
Originally posted by HollyBlood
Про дос лучше уже забыть...
Надо под винду лезть...



Чушь.

Касательно ДОСА и времени:
При загрузке ДОС вешает на прерывание, происходящее с определённой (регулируемой) частотой. Это дело отображается в определённых ячейках памяти. Сорри, чисел не помню, посмотри в хелпах.

1.8K
15 декабря 2002 года
Exfector
74 / / 12.10.2002
Цитата:
Originally posted by Predator
У меня такой вопрос: как проги производят какие-либо операции через определённые интервалы времени? (напр.: Прочитал в книге по асму: 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а.

Успехов !

2.1K
16 декабря 2002 года
Predator
7 / / 27.10.2002
Большое спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог