почему rdtsc дает в eax постоянно четное число?

Тема в разделе "WASM.BEGINNERS", создана пользователем cornolio, 19 янв 2010.

  1. cornolio

    cornolio New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2009
    Сообщения:
    50
    Код (Text):
    1. .data
    2. frmt db '%015lu',0 
    3. .code
    4. test_rdtsc proc
    5.  
    6.     invoke VirtualAlloc, NULL, 1000h, MEM_COMMIT, PAGE_READWRITE
    7.     mov  edi, eax
    8.     push eax
    9.     mov  esi, 32
    10.                        
    11.     @@:
    12.         rdtsc
    13.         invoke wsprintf,  edi, offSet frmt, eax
    14.         mov word ptr [edi + 15], 0a0dh
    15.         add edi, 17
    16.     dec esi
    17.     jnz @b
    18.        
    19.     pop edi
    20.     invoke MessageBox, NULL, edi, NULL, MB_OK
    21.     invoke  VirtualFree, edi, 1000h, MEM_RELEASE
    22.    
    23.     ret
    24. test_rdtsc endp
    то что rdtsc возращает результат в edx:eax это да, но почему в eax все время четное чтсло непойму?
     
  2. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    You are not only one: http://www.wasm.ru/forum/viewtopic.php?pid=332007

    У меня так же, даже пробовал зацыклить:

    @@Next: rdtsc
    test eax,1
    jz @@Next

    ; Unreachable point...
     
  3. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Разве?

    RDTSC -> EAX = A18A4ACF
    A0C8ACD7
    88B1356D
     
  4. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Код (Text):
    1. 000000083272127
    2. 000003976887427
    3. 000003393977819
    4. 000002557185734
    5. 000000169605678
    6. 000001580036171
    7. 000002259824958
    8. 000001365553201
    9. 000002909804220
    10. 000003642961613
    11. 000003744354049
    12. 000003752453749
    13. 000003
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    cornolio
    Зависит от архитекутры. Где-то счётчик тиков вообще раз в восемь тактов обновляется.
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    cornolio
    Multi-core?
     
  7. cornolio

    cornolio New Member

    Публикаций:
    0
    Регистрация:
    16 апр 2009
    Сообщения:
    50
    угу действительно проверил на другой системи там норм, а вот Пентиум 4 дает исключительно четные числа)) http://zaq1.co.cc/rtdsc.jpg
     
  8. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    cornolio
    Они не только чётные. Они все кратны четырём.
     
  9. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Угу, а "где-то" и раз в 15 тактов
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    leo
    Скорее всего от Вас же в своё время и узнал об этом. :) Может даже из той же темы.
     
  11. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    cornolio
    Intel, потому что :)
    У меня, например, всегда кратно 8. Сначала было дико, потом привык. Это вообще ничто по сравнению с тем, что на Core2 (да, думаю и на i7) rdtsc не всегда выдает правильный результат, и приходится корячиться через rdpmc.