Добрый день граждане-специалисты. Возникла у меня проблема возведения в степень на ассемблере. Формула решения есть, но запрограммировать это не получается, мало знаний по FPU. результат = Exp("степень" * ln( "база" )); Как вы знаете, есть мануал по FPU, "FPHELP.HLP", но он не полный. 1) может у кого-то есть более полный и понятный мануал. 2) Как запрограммировать такую формулу. 3) Забыл сказать, если есть альтернативная формула, очень важно учитывать отрицательные степени.
Код (Text): ln c: fldln2 fld c fyl2x fstp b Exp(x)=a: fld x FLDL2E FMULP ST(1),ST(0) FLD ST(0) FRNDINT FSUB ST(1),ST(0) FXCH ST(1) F2XM1 FLD1 FADDP ST(1),ST(0) FSCALE FSTP ST(1) fstp a z == Power(a,b): fldln2 fld a fyl2x fmul qword ptr b FLDL2E FMULP ST(1),ST(0) FLD ST(0) FRNDINT FSUB ST(1),ST(0) FXCH ST(1) F2XM1 FLD1 FADDP ST(1),ST(0) FSCALE FSTP ST(1) fstp z всё выдрано из дельфи есть мануал, в котором исследовали фпу таким же выдирательским методом. писали формулу и смотрели дизассемблером что там накомпилировалось. так что мануалы не нужны
DANioR Если учитывать все недопустимые варианты (например отрицательное число в дробной степени) и переполнения, то код получается достаточно навороченным. Поэтому лучше не изобретать, а взять готовый код, например из борландовского C-Билдера (..\source\..\math\pow.asm) или на крайняк из masm32 (..\fpulib\FpuXexpY.asm, хотя этой доморощенной писанине большого доверия нет). Да и поиск по форуму может кое-чего дать, например такой вариант