Консультация онлайн # 161147

Раздел: Assembler
Автор вопроса: Ефимов Николай Сергеевич
Дата: 22.02.2009, 21:23 Консультация неактивна
Поступило ответов: 1
Здравствуйте у меня задачка есть как измерить интервал времени в ассемблере например 1 секунду ???

Ответ # 1, Евгений Иванов (Посетитель)

Здравствуйте, Ефимов Николай Сергеевич!

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

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

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

Евгений Иванов

Посетитель
24.02.2009, 02:32
Нет оценки ответа

Мини-форум консультации # 161147

Лысков Игорь Витальевич

Академик

ID: 7438

177364

= общий =    22.02.2009, 21:31
DOS, Windows?
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
неизвестный

177366

= общий =    22.02.2009, 21:35
dos
КП делаю в специальной среде
Лысков Игорь Витальевич

Академик

ID: 7438

177381

= общий =    22.02.2009, 23:02
Насколько точное измерение Вам нужно? И для чего?
Дело в том, что ПК - это не система реального времени, точное значение времени получить сложно.
Обычно под ДОС-ом все подобные расчеты привязываются к прерываниям таймера: 18.2 раза в секунду или раз в 55 мс
Отсчитали 18 тиков таймера - имеем примерно 1 секунду. Обычно этого вполне хватает.
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
неизвестный

177430

= общий =    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
тогда за счет чего измеряется время в этом алгоритме??? smile
Лысков Игорь Витальевич

Академик

ID: 7438

177433

= общий =    23.02.2009, 11:49
Данная подпрограмма делает инкремент на 0.01 секунду без привязки к конкретному времени...
Это разве измерение времени? Нет никакой привязки к РЕАЛЬНОМУ времени...
Считаются какие-то там абстрактные "секунды"...
Чуть не прав, идет инкремент на одну сотую...Но это сути не меняет
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Лысков Игорь Витальевич

Академик

ID: 7438

177435

= общий =    23.02.2009, 11:55
Чтобы данная подпрограмма считала реальные сотые секунды, она должна быть привязана к сигналам времени,
т.е. должна вызываться ровно каждую сотую секунды...
Именно это обеспечить невозможно...
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
неизвестный

177439

= общий =    23.02.2009, 12:42
в моей тестовой проге это делается
cmp cycle,0 ; Внешняя задержка
jne label1
call izmer ; Расчет интервала
mov cycle,2FFh
label1: call vision ;Процедура вывода на индикаторы
dec cycle
jmp begin
отстает каждую минуту на 20 сек ужас
но ведь на разных компах отставание будет увеличиваться или уменьшатся
Лысков Игорь Витальевич

Академик

ID: 7438

177462

= общий =    23.02.2009, 14:42
А чего Вы ожидали? Все правильно. Ваша программа что-то там считает, используя какие-то там программные задержки.
Можно, конечно исхитриться, подогнать задержки так, чтобы считало, как надо.
Но при этом правильно считать будет только на Вашем (и на таких же) компьютере.
На разных компьютерах будут получаться разные результаты!
Разная скорость работы процессоров приведет к разной длительности отработки задержек!
Я же говорю, надо привязываться к прерываниям таймера, по которым, например, считывать показания системных часов.
Вы же так и не сказали, что хотите реализовать, для чего это все надо?
Хотите выводить время на индикатор? Насколько точно?
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
неизвестный

177488

= общий =    23.02.2009, 17:08
часы с будильником будут точность секунды
постараюсь сделать хоть минут на пять в сутки чтоб не отставали)))
Спасибо за помощь)))
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.