|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 25, 2003 14:50:46 · Поправил: NeoN нашел такое описание: ------------------------ Int 15h Функция 86h Задержка в мкСек. При вызове: ah=86h cx:dx=задержка в мкСек. При возврате: none ------------------------ пишу ------------------------ xor ax,ax mov ah,86h mov cx,0ffffh mov dx,0ffffh int 15h ------------------------ никакой задержки нету... может я не правильно понял строку cx:dx=задержка в мкСек. то есть если в cx 99, в dx 88 то будет 9988 миксосекудн? если так то почему не работает? |
|
|
Дата: Авг 25, 2003 15:12:56 Паршиво то, что точность у неё всё-равно частотой таймера определяется... Какие бы ты микросекунды не писал... Из TechHelp!-а: In most systems, the finest possible resolution is about 1000 microseconds (about one one-thousandth of a second). Thus, CX must be at least 1000 (03e8H) for this to be useful. |
|
|
Дата: Авг 25, 2003 15:16:14 мне главное чтобы это время то что я укажу было минимальным, то есть если мне надо 10000 микросекунд то пусть на самом деле будет больше, главное чтобы не меньше... |
|
|
Дата: Авг 26, 2003 12:06:37 неужели никто не знает??? |
|
|
Дата: Авг 26, 2003 12:38:41 Ну чего тебе непонятно? В cx старшее слово, в dx младшее. 1 секунда = 1 миллион микросекунд = 0F4240h микросекунд. Для задержки в одну секунду cx=0fh, dx=4240h. Точность у всего этого - плюс минус одна автобусная остановка... ;) |
|
|
Дата: Авг 26, 2003 14:07:23 да блин.. не работает нифига.. даже если ставлю в cx 0ffffh и в dx тоже никакой задержки нет!!!! xor ax,ax mov ah,86h mov cx,0ffffh mov dx,0ffffh int 15h вот это не работает |
|
|
Дата: Авг 26, 2003 15:48:17 Не советую вобще пользоваться прерываниями доса или биоса. Надо таймер самому делать или программно разгонять. Как разгонять я не знаю, но гдето видел примерчики, на коденете.ру кажется. Есть другой вариант - раз вам нужны такие маленькие задержки надо полагать, что процессор у Вас быстрый, а раз быстрый значит в нем должна быть команда RDTSC. Она читает внутренний счетчик тактов процессора и есть она во всех процах >= Pentium и клонах. Минимальный измеряемый интервал при внутренней частоте 100МГц составляет 10 нс. Мощная штука! Подробнее написано например в книге "Программирование на аппаратном уровне" и в инете я гдето видел. У меня есть исходничек небольшой - измерение частоты процессора, если интересно могу выкинуть. |
|
|
Дата: Авг 26, 2003 18:49:22 2 NeoN: Твой код под 98 работает. Под 2000 - нет. |
|
|
Дата: Авг 27, 2003 10:29:34 · Поправил: NeoN Ладно всем спасибо, нашел я таймер нормальный ;dx-кол-во мс TIMERM proc push ax push dx in al,61h and al,11111100b out 61h,al jmp short $+2 mov al,10110100b out 43h,al mov al,0ffh out 42h,al jmp short $+2 out 42h,al jmp short $+2 in al,61h or al,01h out 61h,al jmp short $+2 neg dx waiting: mov al,10000100b out 43h,al jmp short $+2 in al,42h xchg ah,al in al,42h xchg ah,al cmp dx,ax jb waiting pop dx pop ax ret TIMERM endp |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.067 |