Нужна помощь людей знающих ASM 80x86

Тема в разделе "WASM.SOFTWARE", создана пользователем Clocker1980, 14 дек 2008.

  1. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Вот кусок когда из BIOS видеокарты NVIDIA, он должен заведовать регулировкой вентилятора:
    Код (Text):
    1. seg000:00000000 seg000          segment byte public 'CODE' use32
    2. seg000:00000000                 assume cs:seg000
    3. seg000:00000000                 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
    4. seg000:00000000                 push    esi
    5. seg000:00000001                 add     edi, edi
    6. seg000:00000003                 jb      short loc_64
    7. seg000:00000003 ; ---------------------------------------------------------------------------
    8. seg000:00000005                 db    0
    9. seg000:00000006 ; ---------------------------------------------------------------------------
    10. seg000:00000006                 add     [ecx+0], ah
    11. seg000:00000009                 add     bh, bh
    12. seg000:0000000B                 inc     dword ptr [eax]
    13. seg000:0000000B ; ---------------------------------------------------------------------------
    14. seg000:0000000D                 db    0
    15. seg000:0000000E                 db    0
    16. seg000:0000000F                 db    0
    17. seg000:00000010                 db    0
    18. seg000:00000011 ; ---------------------------------------------------------------------------
    19. seg000:00000011                 add     [eax+eax], cl
    20. seg000:00000014
    21. seg000:00000014 loc_14:                                 ; CODE XREF: seg000:0000003Fj
    22. seg000:00000014                 popa
    23. seg000:00000014 ; ---------------------------------------------------------------------------
    24. seg000:00000015                 db    0
    25. seg000:00000016                 db    0
    26. seg000:00000017 ; ---------------------------------------------------------------------------
    27. seg000:00000017                 add     bh, bh
    28. seg000:00000019                 jmp     fword ptr [esi+0Ch]
    29. seg000:0000001C ; ---------------------------------------------------------------------------
    30. seg000:0000001C                 add     [ecx+0], ah
    31. seg000:0000001C ; ---------------------------------------------------------------------------
    32. seg000:0000001F                 db 0FFh
    33. seg000:00000020                 db 0FFh
    34. seg000:00000021                 db 0FFh
    35. seg000:00000022 ; ---------------------------------------------------------------------------
    36. seg000:00000022                 mov     edi, 40000000h
    37. seg000:00000027                 push    esi
    38. seg000:00000028                 add     bh, bh
    39. seg000:0000002A                 jb      short loc_9D
    40. seg000:0000002C                 adc     ds:16C5AF08h[eax], al
    41. seg000:00000033                 add     al, al
    42. seg000:00000035                 and     edx, ecx
    43. seg000:00000037                 sub     al, [ebx]
    44. seg000:00000039                 rcl     byte ptr [ebp-2Fh], 1Ch
    45. seg000:0000003D                 add     al, al
    46. seg000:0000003F                 jb      short loc_14
    47. seg000:00000041                 push    cs
    48. seg000:00000042                 add     eax, eax
    49. seg000:00000044                 adc     esp, 0C0010Eh
    50. seg000:00000044 ; ---------------------------------------------------------------------------
    51. seg000:0000004A                 db    0
    52. seg000:0000004B                 db    0
    53. seg000:0000004C ; ---------------------------------------------------------------------------
    54. seg000:0000004C                 add     [eax+9DAFDh], al
    55. seg000:00000052                 rol     byte ptr [eax], 0
    56. seg000:00000052 ; ---------------------------------------------------------------------------
    57. seg000:00000055                 db    0
    58. seg000:00000056 ; ---------------------------------------------------------------------------
    59. seg000:00000056                 add     [eax+15407Ah], al
    60. seg000:0000005C                 add     [ebx], al
    61. seg000:0000005E                 add     [edi], cl
    62. seg000:00000060                 rep and eax, [ebx+eax]
    63. seg000:00000064
    64. seg000:00000064 loc_64:                                 ; CODE XREF: seg000:00000003j
    65. seg000:00000064                 sbb     [ecx], eax
    66. seg000:00000066                 loopne  near ptr loc_76+2
    67. seg000:00000068                 add     [eax], eax
    68. seg000:0000006A                 add     [ecx], ah
    69. seg000:0000006C                 add     ds:204E2026h, al
    70. seg000:0000006C ; ---------------------------------------------------------------------------
    71. seg000:00000072                 db    0
    72. seg000:00000073 ; ---------------------------------------------------------------------------
    73. seg000:00000073                 add     [edx], ah
    74. seg000:00000075                 aaa
    75. seg000:00000076
    76. seg000:00000076 loc_76:                                 ; CODE XREF: seg000:00000066j
    77. seg000:00000076                 db      64h
    78. seg000:00000076                 cmp     esi, esp
    79. seg000:00000079                 add     [esp+eax*8], edi
    80. seg000:0000007C                 or      [eax], eax
    81. seg000:0000007C ; ---------------------------------------------------------------------------
    82. seg000:0000007E                 db    0
    83. seg000:0000007F ; ---------------------------------------------------------------------------
    84. seg000:0000007F                 add     [ebx], ah
    85. seg000:00000082                 movsb
    86. seg000:00000083                 and     al, 0B3h
    87. seg000:00000085                 movsb
    88. seg000:00000086                 and     al, 3
    89. seg000:00000088                 lds     esp, [ebx+edx*2]
    90. seg000:0000008B                 lds     esp, [ebx]
    91. seg000:0000008E                 lds     eax, ds:0FE46h[edx*4]
    92. seg000:00000095                 inc     dword ptr [eax]
    93. seg000:00000097                 add     bh, bh
    94. seg000:00000097 ; ---------------------------------------------------------------------------
    95. seg000:00000099                 db    0
    96. seg000:0000009A ; ---------------------------------------------------------------------------
    97. seg000:0000009A                 add     bh, bh
    98. seg000:0000009A ; ---------------------------------------------------------------------------
    99. seg000:0000009C                 db    0
    100. seg000:0000009D ; ---------------------------------------------------------------------------
    101. seg000:0000009D
    102. seg000:0000009D loc_9D:                                 ; CODE XREF: seg000:0000002Aj
    103. seg000:0000009D                 add     bh, bh
    104. seg000:0000009D ; ---------------------------------------------------------------------------
    105. seg000:0000009F                 db    0
    106. seg000:000000A0 ; ---------------------------------------------------------------------------
    107. seg000:000000A0                 add     bh, bh
    108. seg000:000000A0 ; ---------------------------------------------------------------------------
    109. seg000:000000A2                 db    0
    110. seg000:000000A3 ; ---------------------------------------------------------------------------
    111. seg000:000000A3                 add     bh, bh
    112. seg000:000000A3 ; ---------------------------------------------------------------------------
    113. seg000:000000A5                 db    0
    114. seg000:000000A6 ; ---------------------------------------------------------------------------
    115. seg000:000000A6                 add     bh, bh
    116. seg000:000000A6 ; ---------------------------------------------------------------------------
    117. seg000:000000A8                 db    0
    118. seg000:000000A9 ; ---------------------------------------------------------------------------
    119. seg000:000000A9                 add     bh, bh
    120. seg000:000000A9 ; ---------------------------------------------------------------------------
    121. seg000:000000AB                 db    0
    122. seg000:000000AC ; ---------------------------------------------------------------------------
    123. seg000:000000AC                 add     bh, bh
    124. seg000:000000AC ; ---------------------------------------------------------------------------
    125. seg000:000000AE                 db    0
    126. seg000:000000AF ; ---------------------------------------------------------------------------
    127. seg000:000000AF                 add     [eax+71h], dl
    128. seg000:000000B2                 jno     short near ptr 125h
    129. seg000:000000B4                 jno     short near ptr 104h
    130. seg000:000000B6                 or      dword ptr [edi-6Bh], 7C515450h
    131. seg000:000000BD                 push    edx
    132. seg000:000000BE                 nop
    133. seg000:000000BF                 push    ebx
    134. seg000:000000C0                 test    eax, 80590058h
    135. seg000:000000C5                 pop     esp
    136. seg000:000000C6                 add     bl, [ebp+60h]
    137. seg000:000000C9                 pop     esi
    138. seg000:000000CA                 sbb     byte ptr [edi-38h], 62h ; 'b'
    139. seg000:000000CE                 and     [esp+ecx*2+67h], ah
    140. seg000:000000D2                 jl      short near ptr 13Ch
    141. seg000:000000D4                 db      64h
    142. seg000:000000D4                 push    0FFFFFFA4h
    143. seg000:000000D7                 ins     byte ptr es:[edi], dx
    144. seg000:000000D8                 enter   246Dh, 74h
    145. seg000:000000DC                 iret
    146. seg000:000000DD ; ---------------------------------------------------------------------------
    147. seg000:000000DD
    148. seg000:000000DD loc_DD:                                 ; CODE XREF: seg000:loc_DDj
    149. seg000:000000DD                 jnz     short near ptr loc_DD+1
    150. seg000:000000DF                 js      short near ptr 0FFh
    151. seg000:000000E1                 jnp     short near ptr 13Ah
    152. seg000:000000E3                 xor     ecx, [esi+20366234h]
    153. seg000:000000E9                 jge     short loc_EC
    154. seg000:000000EB                 inc     eax
    155. seg000:000000EC
    156. seg000:000000EC loc_EC:                                 ; CODE XREF: seg000:000000E9j
    157. seg000:000000EC                 inc     ebp
    158. seg000:000000ED                 jl      short near ptr 11Fh
    159. seg000:000000ED seg000          ends
    160. seg000:000000ED
    161. seg000:000000ED
    162. seg000:000000ED                 end
    Может я в IDA продизасмил чего не так, но выглядит вроде логично. Я хочу отключить всякую регулировку вентилятора в зависимости от температуры. Ещё там должен быть вызов куска кода, который уменьшает производительность карты при перегреве (достижении 70 град).
    Помогите расшифровать, что там к чему. Я сам в асме не разбираюсь почти.
     
  2. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    И в который раз Питера Абеля в студию ))) Или рассылку Калашникова )))
     
  3. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Улыбки это хорошо, только к теме они не относятся вместе со словами.
     
  4. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    Clocker1980
    Дамп в студию.
     
  5. SmanxX1

    SmanxX1 Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    139
    Вообще-то у нвидии, вентилятором управляет драйвер а не биос.

    П.С. Как(чем) снял дамп?
     
  6. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Вот тут полный дамп снятый с помощью NiBiTor 4.6 http://www.rapidshare.ru/857452 , а также кусок кода с адреса 0xDAA5 по 0xDB93, который был "выужен" экспирементальным путём одним добрым человеком. Дизасм из первого сообщения кривой скорее всего, я вобще не копенгаген в этом деле. Согласен, что веником управляет драйвер, потому как CPU, а не GPU выполняет код BIOS.

    Если быть более подробным, то суть такая: у видеокарты при установке оборотов на 100% через RivaTuner резко увеличивается производительность и достигает своих нормальных значений (как у аналогичных карт других брэндов), но в процессе работы GPU прогревается до 70град и сразу запускается какой-то алгоритм, который начинает менять обороты вентилятора и снижает производительность ВК. Вроде бы логично, если чип нагрелся, то надо и обороты увеличить и частоты понизить. Но после того, как всё остывает, производительность ВК возвращается на свой прежний низкий уровень, поднять который можно снова задав 100% оборотов веника. Хотелось бы максимум: найти то место, где врубается "турборежим" и оставить его навсегда, а минимум это блокировать порог в 70 град, чтобы производительность оставалась высокой, или поднять этот порог до разрешённых 105 град.

    Заранее спасибо, надеюсь и жду. Может будет предложение использовать IDA для трассировки функционирования драйвера, я попробую, хотя не знаю как это делать.
     
  7. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Ещё забыл добавить, что я осуществлял мониторинг всех частот ВК и тепературы, а также оборотов вентилятора в программе Риватюнер, факт работы "турборежима" там не фиксируется, частоты остаются всё время постоянные. Я фиксировал этот факт в параллельно запущенной программе, которая отрисовывала картинку в окошке и показывала среднее значение кадров в секунду.
     
  8. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    А не легче в той же RivaTuner в настройках покопаться? Или в настройках драйвера?

    Есть такая замечательная опция Hight Performance ))) Как то так...

    Хочетчя труъ - учи ассемблер ))
     
  9. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Риватюнер уже до дыр затёрт. Я не один с этой траблой столкнулся, уже и от других карт БИОСы пробовали, опасное это дело, потом на экране такая чешуя, что наощупь родной биос ставить приходится. А High Perfomance качество рендеринга ухудшает - не годится это совсем.

    ЗЫ: Я в основном микроконтроллеры 8051, AVR програмлю. А насчёт 80x86 асма я пас.
     
  10. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    Clocker1980

    Упс, наоборот... HightQuality )))
    Качество выше => Карта греется => Вентилятор крутится как бешеный => Дао => Космос...
     
  11. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Ну ты приколист, мне в космос пока не надо )))
     
  12. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    Ну в целом-то решение принимается? ))))
    Иногда не всё так СЛОЖНО, как хочется )))


    З.Ы.
    Ты тоже ткнул "Дебил Криворукий" ?! ))))))))))))))))))
    Мля...
     
  13. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Если серьёзно, то негодится, потому что сначала веник уже крутится как бешеный => карта почему то с такого ветра начинает быстрее работать=>потом греется до 70 град=>потом веник начинает менять обороты почему-то в сторону уменьшения и карта начинает медленней работать и продолжает работать медленно даже когда остынет (и при холодном старте тоже работает медленно, если веник не завести на 100% ). В общем с контуром автоматической термостабилизации полный бардак. Хочется определить в каком куске кода включается замедление и вместо него наставить NOPов, а потом RET, или просто блокировать вызов этого куска кода. Если взять другую карту с теми же дровами, там такой фигни нету, значит фишка в БИОС, верно?
     
  14. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Вобще протрассировать бы как нибудь этот момент выхода на 70 градусов. Все дрова и копия БИОСа в ОЗУ ведь лежат. Только как это сделать?
     
  15. Clear_Energy

    Clear_Energy Алексей

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    375
    У тя какая видяха?
     
  16. Clocker1980

    Clocker1980 New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2008
    Сообщения:
    9
    Palit 9800GT

    С биосом разобрался теперь всё устраивает, тему можно закрывать.
     
  17. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    а не проще поэкспериментировать с радиатором/вентилятором? чтоб вообще не перегревалось?