t00x 1) Так, rdtsc, дает число тиков в edx:eax, правильно? Если в eax после первой rdtsc, к примеру 0xffffffff, а в edx - smth, то что получится в edx в следующий момент? Если не smth+1, то машина либо супербыстрая, либо не работает. Оба варианта невозможны, следовательно в edx будет smth+1. 2) Разницу правильно считать так: sub eax, [saved_eax] sBb edx, [saved_edx]
проверил на linux x86_64. Код (Text): cpuid ;------------ rdtsc mov [time], rax mov [time0], rdx ;code ;code clc rdtsc sub rax, [time] sub rdx, [time0] int 3 sub eax, 0 ;------------ xor edi,edi ; exit code 0 mov eax,60 ; sys_exit syscall после int 3 dbg выдал результат: rdtsc возвращает значение в edx:eax даже в 64 режиме; $rax потому что нет регистра $eax аппаратный глюк? P.S. процессор Intel P4 506 2.66 посмотрите плз, у кого такой же
t00x Нет, т.к. по всей видимости ты пытаешься делать измерения прямо на старте проги, когда страница секции данных еще не инициализирована. См. Еще один вариант IsDebuggerPresent по RDTSC
leo секция данных инициализирована (Olly), оттуда предварительно читаю данные. по ссылке после запуска IsDbg и IsDbg2 получил похожие результаты. возможно такие задержки из-за отладки. на PIII + Delphi у меня получалось ровно 11 тиков, а здесь за 25000 бывает, ещё и плавает ~8000. P.S. разобрался. получается 100 тиков Спасибо.