Это не авторский оригинал, а попытка расшифровать уже кем-то откомпиленный бинарник. Короче прога что-то там вычисляет. Код (Text): call gnu_input_console_now ;Вводим какое-то число add esp, 4 ;??? fild dword ptr [ebp-8] mov eax, dword ptr [ebp-8] imul eax, dword ptr [ebp-8] push eax fild dword ptr [esp] add esp, 4 fdiv qword ptr [Lt_0003] fxch st(1) faddp fdiv qword ptr [Lt_0004] fistp dword ptr [ebp-12] push 1 push dword ptr [ebp-12] push 0 Я так понял, что Lt_0003, Lt_0004 это числовые константы Подозреваю, что есть операция возведения в степень. Кто что думает?
По-моему так: Код (Text): DWORD X = [ebp-8]; [ebp-12] = ( double(X*X) / Lt_0003 + X ) / Lt_0004; Что касается Код (Text): add esp, 4 ;??? , то это всего лишь коррекция стека после __cdecl вызова.
flankerx А может ли быть так: [ebp-12] = ( x+( x ^ Lt_0003 / Lt_0003 ) ) / Lt_0004 ; просто методом подстановки значений такое выражение наиболее подходит. или я не прав в чем-то?
Да нет, я тоже смотрел - по-моему flankerx правильнее писал; Ет наверное по значениях вышёл похожый результат или глюк какой?
device fdiv все же делит, а не в степень возводит. а вообще возьми instruction reference, там все написано. кусочек кода у тебя маленький, минут за 20-30 разберешься.
Засунь программу в какой-нибудь REC и посмотри как она соберёт эту последовательность. Косяков за ней не наблюдал.
Я начинаю только.. смотрел в справочнике(в книге), не нашел этих ф-ций.. не могли бы вы рассказать, что они означают? fdiv, fistp и fxch st(1) faddp
здесь есть эти функции http://developer.intel.com/design/processor/manuals/253666.pdf и chapter 8 отсюда http://developer.intel.com/design/processor/manuals/253665.pdf
не знаю какой ты смотрел справочник и почему искал именно функции - это инструкции сопроцессора fdiv - деление двух чисел, результат ST(1) / ST(0) попадает на вершину стека faddp - сложение fispt сохранение, и наконец fxch - обмен