· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› int 15h

Посл.отвђт Сообщен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