Консультация № 161147
22.02.2009, 21:23
0.00 руб.
0 10 1
Здравствуйте у меня задачка есть как измерить интервал времени в ассемблере например 1 секунду ???

Обсуждение

давно
Посетитель
7438
7205
22.02.2009, 21:31
общий
DOS, Windows?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
22.02.2009, 21:35
общий
dos
КП делаю в специальной среде
давно
Посетитель
7438
7205
22.02.2009, 23:02
общий
Насколько точное измерение Вам нужно? И для чего?
Дело в том, что ПК - это не система реального времени, точное значение времени получить сложно.
Обычно под ДОС-ом все подобные расчеты привязываются к прерываниям таймера: 18.2 раза в секунду или раз в 55 мс
Отсчитали 18 тиков таймера - имеем примерно 1 секунду. Обычно этого вполне хватает.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
23.02.2009, 11:32
общий
ras4et proc near ; Изменение времени
mov al,vremya[0]
inc al
DAA
mov vremya[0],al
cmp vremya[0],00010000b
jne ras4et_m1
mov vremya[0],0
mov al,vremya[1]
inc al
DAA
mov vremya[1],al
cmp vremya[1],01100000b
jne ras4et_m1
mov vremya[1],0
mov al,vremya[2]
inc al
DAA
mov vremya[2], al
ras4et_m1: ret
ras4et endp
тогда за счет чего измеряется время в этом алгоритме???
давно
Посетитель
7438
7205
23.02.2009, 11:49
общий
Данная подпрограмма делает инкремент на 0.01 секунду без привязки к конкретному времени...
Это разве измерение времени? Нет никакой привязки к РЕАЛЬНОМУ времени...
Считаются какие-то там абстрактные "секунды"...
Чуть не прав, идет инкремент на одну сотую...Но это сути не меняет
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
23.02.2009, 11:55
общий
Чтобы данная подпрограмма считала реальные сотые секунды, она должна быть привязана к сигналам времени,
т.е. должна вызываться ровно каждую сотую секунды...
Именно это обеспечить невозможно...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
23.02.2009, 12:42
общий
в моей тестовой проге это делается
cmp cycle,0 ; Внешняя задержка
jne label1
call izmer ; Расчет интервала
mov cycle,2FFh
label1: call vision ;Процедура вывода на индикаторы
dec cycle
jmp begin
отстает каждую минуту на 20 сек ужас
но ведь на разных компах отставание будет увеличиваться или уменьшатся
давно
Посетитель
7438
7205
23.02.2009, 14:42
общий
А чего Вы ожидали? Все правильно. Ваша программа что-то там считает, используя какие-то там программные задержки.
Можно, конечно исхитриться, подогнать задержки так, чтобы считало, как надо.
Но при этом правильно считать будет только на Вашем (и на таких же) компьютере.
На разных компьютерах будут получаться разные результаты!
Разная скорость работы процессоров приведет к разной длительности отработки задержек!
Я же говорю, надо привязываться к прерываниям таймера, по которым, например, считывать показания системных часов.
Вы же так и не сказали, что хотите реализовать, для чего это все надо?
Хотите выводить время на индикатор? Насколько точно?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
23.02.2009, 17:08
общий
часы с будильником будут точность секунды
постараюсь сделать хоть минут на пять в сутки чтоб не отставали)))
Спасибо за помощь)))
давно
Советник
419
1011
24.02.2009, 02:32
общий
это ответ
Здравствуйте, Ефимов Николай Сергеевич!

Чтобы в ДОС сделать задержку на заданный промежуток времени, можно использовать функцию БИОСА:

1 секунда - это 1 миллион микросекунд, то есть 16:0000 (16*65536)

mov cx,0010h ; старшее слово числа микросекунд паузы
mov dx,0000h ; младшее слово числа микросекунд паузы
mov ah,86h ; функция 86h
int 15h ; пауза
Форма ответа