время со старта процессора (область данных bios)

Тема в разделе "WASM.BEGINNERS", создана пользователем raveclassic, 23 июн 2010.

  1. raveclassic

    raveclassic New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2010
    Сообщения:
    5
    помогите с определением времени (или хотя бы тактов) прошедшего со старта процессора
    советовали rdtsc, но задача заключается в использовании прерываний bios, то есть 32x не пойдет
    читал про 4 байта по адресу 0000:40С6, но это оказался системный таймер (т.е. обычное время)
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    хм, глянул карту bios data area - есть только
    "incremented by INT 8" было бы ваще супер, если бы при включении счетчик равнялся нулю.
    советую покопать эту переменную - может можно выудить число инкрементов с момента включения (точнее, регистрации обработчика IRQ0 и разрешения прерываний)
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    кстати, в других источниках
    кажись, тебе подойдет
     
  4. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Это с момента загрузки. А ему надо с момента старта процессора. ИМХО, задача сия неразрешима (если не привлекать внешних средств).
     
  5. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    raveclassic,

    rdtsc работает и в 16-битном коде.
     
  6. raveclassic

    raveclassic New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2010
    Сообщения:
    5
    во во
    46c это грубо говоря таймер, который каждые 24 часа обнуляется и при переполнении в 470 пишется 1 (
    int 8 каждую 1/18 секунды прибавляет к этому счетчику 1
     
  7. raveclassic

    raveclassic New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2010
    Сообщения:
    5
    пробовал и masm 6 и tasm use16 и tasm use32 и tasm32 (5.0) и .586/.586p добавлял
    хоть ты тресни, при трансляции пишет illegal instruction,
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    SII
    ну момент включения прерываний с установленным IRQ0 хендлером и момент включения компа можно считать почти равноценными. на крайняк замерить среднюю разницу и добавлять. или ты не о том времени старта?
    если ты имеешь в виду, что при перезагрузке он сбросится, то тогда по-моему задача нерешаема. ну разве то да, внешние средства типа какой-нить болтушки на LPT :) на микрохе
    читал о том, что он слишком неточный. замерять по нему время нереально, говорят (сам не знаю).
    относительные интервалы по нему сравнивать между собой еще можно, а оценивать абсолютные вряд ли, мне кажется
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    можно пропатчить загрузчик в мбр/бутсекторе, чтобы он хукал int 8 и инкрементил свой каунтер.
    а в момент хука дополнительно считывать 0040:006c, если не будет переполнения с момента старта до считывания, то прочитаться должно нормально. а дальше замерять самостоятельно.
    raveclassic
    попробуй db 0x0f, db 0x31 :)
     
  10. raveclassic

    raveclassic New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2010
    Сообщения:
    5
    db 0fh,31h
    вобще в отладчике похоже на правду, сейчас разберусь
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    я не знаю масма, поэтому не скажу какие директивы прописать, чтобы он распознал rdtsc.
    но мой фасмик понимает)
     
  12. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    А более древних ассемблеров нет? Уж они-то наверняка знают. :derisive:

    MASM 9 из VS2008 понимает (в .586).

    И как все эти танцы соотносятся с первоначальной задачей?
    "помогите с определением времени (или хотя бы тактов) прошедшего со старта процессора" (выделение моё).
     
  13. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    .586 в начале файла и 6-й масм понимает
     
  14. raveclassic

    raveclassic New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2010
    Сообщения:
    5
    вобщем rdtsc работает через db 0fh,31h
    а как получить время? поделить на частоту процессора?
     
  15. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    raveclassic
    сперва замерить скольким тактам соответствет 1 секунда через rdtsc / Sleep(1000) /rdtsc а потом подсчитать сколько часов, минут, секунд прошло после последней перезагрузки
     
  16. Atlantic

    Atlantic Member

    Публикаций:
    0
    Регистрация:
    22 июн 2005
    Сообщения:
    322
    Адрес:
    Швеция
    Через rdtsc время со старта процессора мерить точно нельзя. Потому что:
    1) Частота процессора можеть динамически меняться.
    2) Разные ядра вообще могут работать на разной частоте одновременно.
     
  17. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    Atlantic
    Вопрос а для чего большая точность в информации о том, когда был включен процессор? Я думаю ТС устроит погрешность в несколько секунд, да и о колчестве ядер пока никто не говорил...
     
  18. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Ну так rdtsc в таких системах не зависит от частоты процессора ядра
     
  19. KKorolev

    KKorolev New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2011
    Сообщения:
    3
    Можно использовать чтение часов реального времени из CMOS, т.е. при старте проги читается значение, которое затем считается начальным. Ну а потом - по необходимости.