Время исполнения кода.

Тема в разделе "WASM.A&O", создана пользователем gaeprust, 22 май 2011.

  1. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    deLight
    каких конструкций?

    xchg eax,edx

    ?
    просто балласт. хотите - уберите.

    давайте ваше проще. если заодно проверите отчего иногда задержка сразу после начала, вообще хорошо будет. не думаю, что это своп. память почти пустая. я только проц грузил. думаю, это место стека в кэш проца перечитывается.
     
  2. artkar

    artkar New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2005
    Сообщения:
    400
    Адрес:
    Russia
    А обязательно НТ? Может можно взять какую-нибудь ОС реального режима, однозадачную (нпр. ДОС хотя-бы) и выполнить этот участок кода на ней? И там будет всё точно без всяких поправок-чистое время? И просто!

    Идея asmlamo тоже кажется интересной - посчитать все команды и перемножить каждую на количество тактов для каждой команды. Нечто подобное ведь делает компилятор при оптимизации. Хотя труд будет велик, но продукт будет универсальный.
     
  3. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    gaeprust, ну коль сюда пригласили из другого топика.
    1. Что делает код? Какими ресурсами/системными вызовами/библиотеками пользуется?
    2. Зачем вам нужна такая точность? Имеет ли смысл вообще что-то замерять, когда скорость будет зависеть от конкретной модели процессора?
     
  4. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    Да не будет. Вы же не знаете заранее состояние кэшей, не знаете результаты предсказания переходов, предсказания аппаратных префетчей, предсказания спекулятивного доступа к памяти. А от этого время исполнения будет варьироваться очень сильно.
     
  5. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    540
    да, DTLB еще забыл
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Не понятен, смысл всей этой затеи. Если постоянно крутить какие-то проверки, то в лучшем случае можно либо 1) просто провести квазинаучное исследование того, как часто и насколько прерывается поток (как-то давно один чел тут даже какую-то красивую гистограммку приводил распределения задержек), 2) в рабочем варианте тестирования времени исполнения некого кода можно пытаться определять начало кванта и т.п. Но как можно определять\обнаруживать какие-то прерывания во время работы самого тестируемого куска, не насовав в него "левых" проверок (которые в итоге исказят реальное время работы больше, чем все прерывания) - совершенно не понятно и похоже на попытку "вытащить себя за волосы" ;)
     
  7. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    leo
    у меня 1 нырок в ядро и возврат слипом(0) занимает ~600 тактов. прерывание отнимет больше. любое переключение контекста займет гораздо больше времени чем квант. потому, можно просто ориентироваться на то чтоб время участка было меньше кванта.
    а вот что исказит, так это подчитывания в кэш.
    просто, как любопытная задачка. возможно, когда нибудь пригодится.
    например, счас мне интересно досрочно завершить квант потока из самого потока, но нормально получить очередной квант. пока что ясно, что слипом(0) этого не сделать. и слип(1) ведет себя не так как бы хотелось.
     
  8. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    qqwe
    Если измеряемое время заведомо (а еще лучше существенно) меньше кванта, то все эти приблуды нафиг не нужны - достаточно поднять приоритет потока до реал-тайма, провести серию из 5-10 измерений и выбрать из них наименьшие повторяющиеся значения

    См: 1) общие измышлизмы а ля А.Фог, 2) видимо последний из завалявшихся вар-тов wintest
     
  9. artkar

    artkar New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2005
    Сообщения:
    400
    Адрес:
    Russia
    Это уже за областью ответственности программиста.
     
  10. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    deLight
    Регистр Gs никакого отношения с планированию не имеет. Цикл бесконечный:
    Код (Text):
    1.     mov ax,ds
    2.     mov gs,ax
    3. @@:
    4.     mov ax,gs
    5.     test ax,ax
    6.     jnz @b
     
  11. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    leo
    ->
    Sleep(0) не ждет начала кванта. я тоже так думал, но тест приведенный выше говорит, что он просто ныряет в ядро и сразу же выходит в том же кванте.
     
  12. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    qqwe
    Не понятно что ваш код делает. Если представить работу потока, как на скрине выше, то необходимо обождать окончание прерывания и новый квант как задний фронт импульса не диаграмме. Например выполняем цикл ожидания сброса RPL. Когда окажется сброшен, то произошёл возврат из прерывания. Новый квант потока начинается с возврата из прерывания. Пусть T0 - время(в тиках TSC) возврата из прерывания. T1 - последнее значение TSC, до сброса RPL. Тогда рабочее время потока будет Tr = T0 - T1. Длительность прерывания Tint = T0' - T1, где T0' - время следующего возврата из прерывания. Длительность кванта будет равна сумме длительностей обработки прерываний и рабочих длительностей. Tint = Tidle(время, в течении которого процессор отдан другому треду, тоесть простой). Разницу можно определить из значения Cr0. Сумма Tidle, как и Tr за несколько десятков квантов должна быть фактически константой(гипотетически).
     
  13. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    gaeprust
    ну, у меня идея простая. общая мысль там такая:
    1) между квантами проходит очень много времени. этой аномальной задержки и ждет первый цикл. (там проверочку лучше удлинить раз так в 10-100 чтоб цикл не реагировал на мелкие задержки)
    2) меряется квант. опять же, на измерении времени кода. появление слишком большой задержки распознается как конец счета
    3) вывод результатов. у меня получается в в большинстве случаев 165xxxx с копейками (частота проца ~1.6 Ггц. 1мс квант выходит).

    но наврядли это лучшая мысль. простая просто. думаю, вы предложите лучше.
     
  14. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    qqwe
    Наверное правильнее сказать, что sleep(0) не обязана ждать начала кванта, т.к. если в системе на данный момент нет потоков того же приоритета, готовых к исполнению на том же ядре\процессоре, то ес-но система может продолжить исполнение твоего потока. Для определенности вместо sleep(0) можно юзать SwitchToThread, которая возвращает BOOL, показывающий произошло ли переключение на другой поток, или нет
     
  15. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    leo
    да, SwitchToThread работает интереснее. буду знать. похоже, это решение моего вопроса. спасибо
     
  16. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    У меня получился следующий результат:
    Код (Text):
    1. Cqint = 0x00000010, dTq = 0x02C87789, SdTr = 0x02C4D72D, SdTi = 0x000466D1, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000A1, SdTr/SdTi = 0x000000A1, dTr = 0x002CA4C5, dTi = 0x0000D0D4, Err = 0x0000C674
    2. Cqint = 0x00000010, dTq = 0x02C8F152, SdTr = 0x02C54CFF, SdTi = 0x0004E0D0, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000092, SdTr/SdTi = 0x00000091, dTr = 0x002CB7B2, dTi = 0x0001471A, Err = 0x00013C7C
    3. Cqint = 0x00000010, dTq = 0x02C84013, SdTr = 0x02C4B95F, SdTi = 0x0004345D, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000A9, SdTr/SdTi = 0x000000A8, dTr = 0x002CB578, dTi = 0x0000B7DE, Err = 0x0000ADA8
    4. Cqint = 0x00000010, dTq = 0x02C82455, SdTr = 0x02C3EEF7, SdTi = 0x000989B1, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000004A, SdTr/SdTi = 0x0000004A, dTr = 0x002C5C0E, dTi = 0x00055EBA, Err = 0x00055452
    5. Cqint = 0x00000025, dTq = 0x02C186D3, SdTr = 0x02BBC36E, SdTi = 0x000665A5, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000006E, SdTr/SdTi = 0x0000006D, dTr = 0x002CB005, dTi = 0x0000BAD4, Err = 0x0000A23F
    6. Cqint = 0x00000010, dTq = 0x02C4DBBE, SdTr = 0x02C147B7, SdTi = 0x000CE4C4, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000036, SdTr/SdTi = 0x00000036, dTr = 0x002CAB20, dTi = 0x00095B0D, Err = 0x000950BC
    7. Cqint = 0x00000010, dTq = 0x02AC6438, SdTr = 0x02A83D21, SdTi = 0x0005BAEC, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000077, SdTr/SdTi = 0x00000076, dTr = 0x002CB7DF, dTi = 0x00019E8D, Err = 0x000193D4
    8. Cqint = 0x00000010, dTq = 0x02C7A1A3, SdTr = 0x02C3CD5D, SdTi = 0x00049782, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000009A, SdTr/SdTi = 0x0000009A, dTr = 0x002CB570, dTi = 0x0000CD8C, Err = 0x0000C33B
    9. Cqint = 0x00000010, dTq = 0x02C94BE8, SdTr = 0x02C53799, SdTi = 0x000501B3, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000008E, SdTr/SdTi = 0x0000008D, dTr = 0x002CB53C, dTi = 0x0000F7CB, Err = 0x0000ED63
    10. Cqint = 0x00000010, dTq = 0x02C824E3, SdTr = 0x02C4E929, SdTi = 0x0007691E, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000060, SdTr/SdTi = 0x0000005F, dTr = 0x002C9F87, dTi = 0x000437E9, Err = 0x00042D63
    11. Cqint = 0x00000010, dTq = 0x02CADEE3, SdTr = 0x02C763C2, SdTi = 0x000497F8, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000009B, SdTr/SdTi = 0x0000009A, dTr = 0x002CB19A, dTi = 0x0001278C, Err = 0x00011CD6
    12. Cqint = 0x00000010, dTq = 0x02C76DD7, SdTr = 0x02C3C6CC, SdTi = 0x0024D1F5, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000013, SdTr/SdTi = 0x00000013, dTr = 0x002CB3A7, dTi = 0x00213522, Err = 0x00212AE9
    13. Cqint = 0x00000010, dTq = 0x02AD26ED, SdTr = 0x02AA3050, SdTi = 0x0003F478, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000AD, SdTr/SdTi = 0x000000AC, dTr = 0x002CB5FF, dTi = 0x00010876, Err = 0x0000FDDA
    14. Cqint = 0x00000010, dTq = 0x02C403E3, SdTr = 0x02BFF7C5, SdTi = 0x0005373C, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000087, SdTr/SdTi = 0x00000086, dTr = 0x002C983B, dTi = 0x00013585, Err = 0x00012B1D
    15. Cqint = 0x00000010, dTq = 0x02C8A2BF, SdTr = 0x02C5345F, SdTi = 0x00055C4B, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000084, SdTr/SdTi = 0x00000084, dTr = 0x002CA1CF, dTi = 0x0001F833, Err = 0x0001EDEA
    16. Cqint = 0x00000010, dTq = 0x02C55A83, SdTr = 0x02C1E33C, SdTi = 0x0007A82C, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000005C, SdTr/SdTi = 0x0000005C, dTr = 0x002CA293, dTi = 0x00043CB7, Err = 0x000430E4
    17. Cqint = 0x00000010, dTq = 0x02C3E3BF, SdTr = 0x02C081FF, SdTi = 0x00250AD9, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000013, SdTr/SdTi = 0x00000013, dTr = 0x002CAFD1, dTi = 0x0021B466, Err = 0x0021A918
    18. Cqint = 0x00000010, dTq = 0x02C9980D, SdTr = 0x02C64A8A, SdTi = 0x0004B878, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000097, SdTr/SdTi = 0x00000096, dTr = 0x002CB7B2, dTi = 0x00017527, Err = 0x00016AF4
    19. Cqint = 0x00000010, dTq = 0x02CC0E84, SdTr = 0x02C85FCE, SdTi = 0x0004A931, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000099, SdTr/SdTi = 0x00000098, dTr = 0x002CB7DF, dTi = 0x00010635, Err = 0x0000FA7A
    20. Cqint = 0x00000010, dTq = 0x02C9A5CA, SdTr = 0x02C59208, SdTi = 0x00040A09, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000B0, SdTr/SdTi = 0x000000AF, dTr = 0x002D8915, dTi = 0x000000B4, Err = 0x000009B9
    21. Cqint = 0x00000010, dTq = 0x02C57AB5, SdTr = 0x02C23D9B, SdTi = 0x0025096F, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000013, SdTr/SdTi = 0x00000013, dTr = 0x002CB7C8, dTi = 0x0021D680, Err = 0x0021CC54
    22. Cqint = 0x00000010, dTq = 0x02C61FD4, SdTr = 0x02C2B522, SdTi = 0x00072DB5, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000062, SdTr/SdTi = 0x00000062, dTr = 0x002CAEC3, dTi = 0x0003CDAE, Err = 0x0003C302
    23. Cqint = 0x00000010, dTq = 0x02C649ED, SdTr = 0x02C3287B, SdTi = 0x0003181A, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000E5, SdTr/SdTi = 0x000000E4, dTr = 0x00313DA0, dTi = 0x000000DA, Err = 0x00000958
    24. Cqint = 0x00000019, dTq = 0x00DEF1CC, SdTr = 0x00DBB7FB, SdTi = 0x00071543, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000001F, SdTr/SdTi = 0x0000001F, dTr = 0x002CA6F7, dTi = 0x0003ED8F, Err = 0x0003DB71
    25. Cqint = 0x00000010, dTq = 0x02EBE6BA, SdTr = 0x02E806F9, SdTi = 0x0003D5F1, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000C2, SdTr/SdTi = 0x000000C1, dTr = 0x004EA8DB, dTi = 0x0000008E, Err = 0x000009D0
    26. Cqint = 0x00000010, dTq = 0x02C7F4FD, SdTr = 0x02C46E10, SdTi = 0x0004ACDE, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000098, SdTr/SdTi = 0x00000097, dTr = 0x002CB6BB, dTi = 0x00013047, Err = 0x000125F0
    27. Cqint = 0x00000010, dTq = 0x02C87A0D, SdTr = 0x02C4AD23, SdTi = 0x000523EE, dTq/SdTr = 0x00000001, dTq/SdTi = 0x0000008A, SdTr/SdTi = 0x00000089, dTr = 0x002CAFBA, dTi = 0x0001612D, Err = 0x00015703
    28. Cqint = 0x00000010, dTq = 0x02C8F82D, SdTr = 0x02C58EB2, SdTi = 0x000747A2, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000061, SdTr/SdTi = 0x00000061, dTr = 0x002CB5F0, dTi = 0x0003E8A3, Err = 0x0003DE26
    29. Cqint = 0x00000010, dTq = 0x02CAA2C5, SdTr = 0x02C73F15, SdTi = 0x00042B1A, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000AB, SdTr/SdTi = 0x000000AA, dTr = 0x002CB6D1, dTi = 0x0000D1BC, Err = 0x0000C769
    30. Cqint = 0x00000010, dTq = 0x02C6E0CE, SdTr = 0x02C354A8, SdTi = 0x002529F5, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000013, SdTr/SdTi = 0x00000013, dTr = 0x002CB7BA, dTi = 0x0021A94B, Err = 0x00219DCE
    31. Cqint = 0x00000010, dTq = 0x02C9D60A, SdTr = 0x02C69CCF, SdTi = 0x0003E237, dTq/SdTr = 0x00000001, dTq/SdTi = 0x000000B7, SdTr/SdTi = 0x000000B6, dTr = 0x002CB543, dTi = 0x0000B388, Err = 0x0000A8FB
    32. Cqint = 0x00000010, dTq = 0x02C9A1FB, SdTr = 0x02C5F0FC, SdTi = 0x0004E138, dTq/SdTr = 0x00000001, dTq/SdTi = 0x00000092, SdTr/SdTi = 0x00000091, dTr = 0x002CB785, dTi = 0x00013AD3, Err = 0x00013038
    Код такой:
    Код (Text):
    1. %SET_INT_TRIGGER macro
    2.     mov cx,RPL_MASK
    3.     mov es,cx
    4. endm
    5.  
    6. %GET_INT_TRIGGER macro
    7.     mov cx,es
    8.     test cx,cx
    9. endm
    10.  
    11. CR0_MP equ 0010B
    12. CR0_TS equ 1000B
    13.  
    14. %SET_QNT_TRIGGER macro
    15.     fnop
    16. endm
    17.  
    18. %GET_QNT_TRIGGER macro
    19.     smsw eax    ; 16i
    20.     test al,CR0_TS
    21. endm
    22.  
    23. %WAIT_NEXT_QUANTUM macro
    24.     %SET_QNT_TRIGGER
    25.     .repeat
    26.         %GET_QNT_TRIGGER
    27.     .until !Zero?
    28. endm
    29.  
    30. %TSC macro Storage1, Storage2
    31.     rdtsc
    32.     mov dword ptr [Storage1],eax
    33.     mov dword ptr [Storage1 + 4],edx
    34.     ifdef Storage2
    35.         mov dword ptr [Storage2],eax
    36.         mov dword ptr [Storage2 + 4],edx
    37.     endif
    38. endm
    39.  
    40. %DTSC macro Storage, T0, T1
    41.     ifdef T1
    42.         mov eax,dword ptr [T1]
    43.         mov edx,dword ptr [T1 + 4]
    44.     else
    45.         rdtsc
    46.     endif
    47.     sub eax,dword ptr [T0]
    48.     sbb edx,dword ptr [T0 + 4]
    49.     mov dword ptr [Storage],eax
    50.     mov dword ptr [Storage + 4],edx
    51. endm
    52.  
    53. %SDTSC macro Storage, dT
    54.     mov eax,dword ptr [dT]
    55.     mov edx,dword ptr [dT + 4]
    56.     add dword ptr [Storage],eax
    57.     adc dword ptr [Storage + 4],edx
    58. endm
    59.  
    60. %INIT macro dT
    61.     mov dword ptr [dT],0
    62.     mov dword ptr [dT + 4],0
    63. endm
    64.  
    65. $Msg    CHAR "Cqint = 0x%p, dTq = 0x%p, SdTr = 0x%p, SdTi = 0x%p, dTq/SdTr = 0x%p, dTq/SdTi = 0x%p, SdTr/SdTi = 0x%p, dTr = 0x%p, dTi = 0x%p, Err = 0x%p", 13, 10, 0
    66.  
    67. Entry proc
    68. Local Cqint:ULONG       ; Счётчик прерываний за время кванта.
    69. Local Tq:LARGE_INTEGER  ; TSC начала кванта.
    70. Local Tr0:LARGE_INTEGER ; TSC возврата из прерывания(начала рабочего интервала).
    71. Local Tr1:LARGE_INTEGER ; TSC прихода прерывания(окончания рабочего интервала).
    72. Local dTr:LARGE_INTEGER ; dTSC рабочего интервала.
    73. Local dTq:LARGE_INTEGER ; dTSC кванта.
    74. Local dTi:LARGE_INTEGER ; dTSC прерывания(Tint) или холостого интервала(Tidle).
    75. Local SdTr:LARGE_INTEGER    ; Сумма dTr за время кванта.
    76. Local SdTi:LARGE_INTEGER    ; Сумма dTi за время кванта.
    77.     invoke SetProcessAffinityMask, -1, 1
    78.     mov ebx,32
    79. Log:
    80.     ; Ожидаем новый квант.
    81.     %WAIT_NEXT_QUANTUM
    82. Next:
    83.     %INIT SdTr
    84.     %INIT SdTi
    85.     mov Cqint,0
    86.     %SET_QNT_TRIGGER
    87.     %TSC Tq ; TSC начала кванта. Квант начинается с возврата из прерывания.
    88. Iwait:
    89.     %TSC Tr0
    90.     ; Ожидаем прерывание.
    91.     %SET_INT_TRIGGER
    92.     .repeat
    93.         %TSC Tr1    ; Сохраняем TSC.
    94.         %GET_INT_TRIGGER
    95.     .until Zero?
    96.     inc Cqint
    97.     %DTSC dTi, Tr1
    98.     %SDTSC SdTi, dTi
    99.     %DTSC dTr, Tr0, Tr1
    100.     %SDTSC SdTr, dTr
    101.     %GET_QNT_TRIGGER
    102.     jz Iwait
    103.     cmp Cqint,16
    104.     jb Next
    105.     ; Новый квант.
    106.     %DTSC dTq, Tq, Tr1
    107.     mov eax,dword ptr [dTq]
    108.     sub eax,dword ptr [SdTr]
    109.     sub eax,dword ptr [SdTi]
    110.     .if Carry?
    111.         not eax
    112.     .endif
    113.     ; Err = dTq - SdTr - SdTi
    114.     push eax
    115.     push dword ptr [dTi]
    116.     push dword ptr [dTr]
    117.     ; SdTr/SdTi
    118.     xor edx,edx
    119.     mov eax,dword ptr [SdTr]
    120.     div dword ptr [SdTi]
    121.     push eax
    122.     ; dTq/SdTi
    123.     xor edx,edx
    124.     mov eax,dword ptr [dTq]
    125.     div dword ptr [SdTi]
    126.     push eax
    127.     ; dTq/SdTr
    128.     xor edx,edx
    129.     mov eax,dword ptr [dTq]
    130.     div dword ptr [SdTr]
    131.     push eax
    132.     push dword ptr [SdTi]
    133.     push dword ptr [SdTr]
    134.     push dword ptr [dTq]
    135.     push Cqint
    136.     push offset $Msg
    137.     Call DbgPrint
    138.     add esp,11*4
    139.     dec ebx
    140.     jnz Log
    141.     int 3
    Видимо нужно ввести поправки для не учтённых(пропущенных) прерываний.
     
  17. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    qqwe
    Потестите плз у себя. Могу бинарь дать если нет масма.
     
  18. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    gaeprust
    Код (Text):
    1. Cqint = 0x11, dTq = 0x1acb144, SdTr = 0x1a377ca, SdTi = 0x9375f, dTq/SdTr = 0x1, dTq/SdTi = 0x2e, SdTr/SdTi = 0x2d, dTr = 0x1979a7, dTi = 0x4b, Err = 0x21b
    2. Cqint = 0x11, dTq = 0x1acff7c, SdTr = 0x19d3dd7, SdTi = 0x1018db, dTq/SdTr = 0x1, dTq/SdTi = 0x1a, SdTr/SdTi = 0x19, dTr = 0xb01c5, dTi = 0x5972, Err = 0x5735
    3. Cqint = 0x11, dTq = 0x1ae3602, SdTr = 0x1acc136, SdTi = 0x1ba40, dTq/SdTr = 0x1, dTq/SdTi = 0xf9, SdTr/SdTi = 0xf8, dTr = 0x193e00, dTi = 0x47a4, Err = 0x4573
    4. Cqint = 0x11, dTq = 0x1ae1cba, SdTr = 0x1ac2d62, SdTi = 0x225a3, dTq/SdTr = 0x1, dTq/SdTi = 0xc8, SdTr/SdTi = 0xc7, dTr = 0x1936e9, dTi = 0x3842, Err = 0x364a
    5. Cqint = 0x12, dTq = 0x1ab91a8, SdTr = 0x1a9ac57, SdTi = 0x2280d, dTq/SdTr = 0x1, dTq/SdTi = 0xc6, SdTr/SdTi = 0xc5, dTr = 0x1933b0, dTi = 0x44d6, Err = 0x42bb
    6. Cqint = 0x11, dTq = 0x1ae2800, SdTr = 0x1abd013, SdTi = 0x294a8, dTq/SdTr = 0x1, dTq/SdTi = 0xa6, SdTr/SdTi = 0xa5, dTr = 0x1928b9, dTi = 0x3ef5, Err = 0x3cba
    7. Cqint = 0x11, dTq = 0x1ad2f2e, SdTr = 0x1a48a61, SdTi = 0x8e259, dTq/SdTr = 0x1, dTq/SdTi = 0x30, SdTr/SdTi = 0x2f, dTr = 0x193916, dTi = 0x4018, Err = 0x3d8b
    8. Cqint = 0x14, dTq = 0x1ae87d5, SdTr = 0x19be837, SdTi = 0x13f506, dTq/SdTr = 0x1, dTq/SdTi = 0x15, SdTr/SdTi = 0x14, dTr = 0x1939d1, dTi = 0x1582d, Err = 0x15567
    9. Cqint = 0x14, dTq = 0x17e61c2, SdTr = 0x171f3f7, SdTi = 0xd41f7, dTq/SdTr = 0x1, dTq/SdTi = 0x1c, SdTr/SdTi = 0x1b, dTr = 0x192cd3, dTi = 0xd6da, Err = 0xd42b
    10. Cqint = 0x16, dTq = 0x1ae2d3e, SdTr = 0x19d5c89, SdTi = 0x1125c4, dTq/SdTr = 0x1, dTq/SdTi = 0x19, SdTr/SdTi = 0x18, dTr = 0x1079e4, dTi = 0x5808, Err = 0x550e
    11. Cqint = 0x14, dTq = 0x1ae255f, SdTr = 0x1a673c6, SdTi = 0x9293b, dTq/SdTr = 0x1, dTq/SdTi = 0x2e, SdTr/SdTi = 0x2e, dTr = 0x19367b, dTi = 0x17a44, Err = 0x177a1
    12. Cqint = 0x12, dTq = 0x1614e2a, SdTr = 0x154ad02, SdTi = 0xd6a83, dTq/SdTr = 0x1, dTq/SdTi = 0x1a, SdTr/SdTi = 0x19, dTr = 0x1933da, dTi = 0xcbd6, Err = 0xc95a
    13. Cqint = 0x15, dTq = 0x194c2ce, SdTr = 0x186e536, SdTi = 0x2b0b3f, dTq/SdTr = 0x1, dTq/SdTi = 0x9, SdTr/SdTi = 0x9, dTr = 0x142af2, dTi = 0x1d307c, Err = 0x1d2da6
    14. Cqint = 0x14, dTq = 0x1ad55a9, SdTr = 0x19e76ad, SdTi = 0xedca4, dTq/SdTr = 0x1, dTq/SdTi = 0x1c, SdTr/SdTi = 0x1b, dTr = 0x19a652, dTi = 0x5f, Err = 0x258
    15. Cqint = 0x16, dTq = 0x1ae1acb, SdTr = 0x1a291b5, SdTi = 0xc0408, dTq/SdTr = 0x1, dTq/SdTi = 0x23, SdTr/SdTi = 0x22, dTr = 0x193e2a, dTi = 0x7e1b, Err = 0x7af1
    16. Cqint = 0x15, dTq = 0x1b416b0, SdTr = 0x1a0ee7a, SdTi = 0x13251b, dTq/SdTr = 0x1, dTq/SdTi = 0x16, SdTr/SdTi = 0x15, dTr = 0x1f1ec3, dTi = 0x84, Err = 0x31b
    17. Cqint = 0x14, dTq = 0x1a74fc9, SdTr = 0x19eee15, SdTi = 0x9de2e, dTq/SdTr = 0x1, dTq/SdTi = 0x2a, SdTr/SdTi = 0x2a, dTr = 0x193a9b, dTi = 0x17efe, Err = 0x17c79
    18. Cqint = 0x17, dTq = 0x1ae14f6, SdTr = 0x1aa42ad, SdTi = 0x4286b, dTq/SdTr = 0x1, dTq/SdTi = 0x67, SdTr/SdTi = 0x66, dTr = 0x19355d, dTi = 0x58f7, Err = 0x5621
    19. Cqint = 0x13, dTq = 0x17b7de8, SdTr = 0x17379d4, SdTi = 0xf781d, dTq/SdTr = 0x1, dTq/SdTi = 0x18, SdTr/SdTi = 0x18, dTr = 0x192d33, dTi = 0x77681, Err = 0x77408
    20. Cqint = 0x17, dTq = 0x18d0426, SdTr = 0x170f18e, SdTi = 0x249cdf, dTq/SdTr = 0x1, dTq/SdTi = 0xa, SdTr/SdTi = 0xa, dTr = 0x193a89, dTi = 0x88f72, Err = 0x88a46
    21. Cqint = 0x15, dTq = 0x1ad4b94, SdTr = 0x1a1f3a9, SdTi = 0xbd831, dTq/SdTr = 0x1, dTq/SdTi = 0x24, SdTr/SdTi = 0x23, dTr = 0x16b8e7, dTi = 0x8308, Err = 0x8045
    22. Cqint = 0x16, dTq = 0x1ae74a9, SdTr = 0x19f0898, SdTi = 0xf6903, dTq/SdTr = 0x1, dTq/SdTi = 0x1b, SdTr/SdTi = 0x1a, dTr = 0x129253, dTi = 0x5f, Err = 0x30e
    23. Cqint = 0x16, dTq = 0x1aebab0, SdTr = 0x19d5706, SdTi = 0x11fc5d, dTq/SdTr = 0x1, dTq/SdTi = 0x17, SdTr/SdTi = 0x16, dTr = 0x18c877, dTi = 0x9e55, Err = 0x98b2
    24. Cqint = 0x14, dTq = 0x1acf641, SdTr = 0x1a019f3, SdTi = 0xd38ce, dTq/SdTr = 0x1, dTq/SdTi = 0x20, SdTr/SdTi = 0x1f, dTr = 0x193c32, dTi = 0x5f49, Err = 0x5c7f
    25. Cqint = 0x17, dTq = 0x1ae12d6, SdTr = 0x19e6b5c, SdTi = 0x1026f7, dTq/SdTr = 0x1, dTq/SdTi = 0x1a, SdTr/SdTi = 0x19, dTr = 0x1356de, dTi = 0x82df, Err = 0x7f7c
    26. Cqint = 0x15, dTq = 0x1a68b67, SdTr = 0x1959651, SdTi = 0x115daa, dTq/SdTr = 0x1, dTq/SdTi = 0x18, SdTr/SdTi = 0x17, dTr = 0xc81bd, dTi = 0x6b56, Err = 0x6893
    27. Cqint = 0x15, dTq = 0x1a7683f, SdTr = 0x186f153, SdTi = 0x21b0b6, dTq/SdTr = 0x1, dTq/SdTi = 0xc, SdTr/SdTi = 0xb, dTr = 0x192d87, dTi = 0x141b0, Err = 0x139c9
    28. Cqint = 0x15, dTq = 0x1ae5334, SdTr = 0x19ecc7c, SdTi = 0xf8301, dTq/SdTr = 0x1, dTq/SdTi = 0x1b, SdTr/SdTi = 0x1a, dTr = 0x243ac, dTi = 0x4b, Err = 0x3b7
    29. Cqint = 0x16, dTq = 0x1a3a2ff, SdTr = 0x193524a, SdTi = 0x10b887, dTq/SdTr = 0x1, dTq/SdTi = 0x19, SdTr/SdTi = 0x18, dTr = 0x19327c, dTi = 0x6b20, Err = 0x67d1
    30. Cqint = 0x16, dTq = 0x1ad0761, SdTr = 0x1a89d02, SdTi = 0x4cdcc, dTq/SdTr = 0x1, dTq/SdTi = 0x59, SdTr/SdTi = 0x58, dTr = 0x17af96, dTi = 0x66b4, Err = 0x636c
    31. Cqint = 0x13, dTq = 0x1ae38e6, SdTr = 0x1845ac3, SdTi = 0x2ad9a6, dTq/SdTr = 0x1, dTq/SdTi = 0xa, SdTr/SdTi = 0x9, dTr = 0x1938ad, dTi = 0x103b6, Err = 0xfb82
    32. Cqint = 0x18, dTq = 0x1ae2385, SdTr = 0x1a79163, SdTi = 0x6ee2e, dTq/SdTr = 0x1, dTq/SdTi = 0x3e, SdTr/SdTi = 0x3d, dTr = 0x38b1f, dTi = 0x5f11, Err = 0x5c0b