Здравствуйте! Обращаюсь к вам с такой проблемой. Только недавно начал писать на ФАСМе, опыта ноль. Но надо срочно сделать программу, которая в консоли посчитает exp(x). Есть кое-какие наброски, но никак не пойму, почему значение X не вносится в стек ST0. Помогите пожалуйста исправить код. Код (Text): format PE console entry start include 'win32a.inc' section '.data' data readable writeable ns dd ? hout dd ? x dq ? section '.code' code readable executable start: invoke GetStdHandle,STD_OUTPUT_HANDLE mov [hout],eax invoke GetStdHandle,STD_INPUT_HANDLE invoke ReadConsole,eax,x,10,ns,NULL finit fld [x] fldl2e ;Log2(E) fmul st1, st ;сложение st1 и st0 fld st frndint ;округляет до ближайшего целого значения, зависящего от текущего режима округления. fsub st1, st ;вычитает операнд-источник из операнда-адресата fxch st1 ;меняет местами содержимое регистра ST0 и другого регистра FPU. ;Операндом должен служить регистр FPU, а если он не указан, меняются местами регистры ST0 и ST1. f2xm1 ;вычисляет экспоненциальное значение 2 в степени ST0 и вычитает из результата 1.0 (2^x-1), ;значение в ST0 должно лежать в пределах от -1.0 до +1.0 fld1 ; загружаем единицу fadd st1, st ;складывает операнд-источник и операнд-адресат и сохраняет сумму в адресате. fscale ;оставляет целую часть значения в ST1 и увеличивает экспоненту ST0 на полученное число. fstp [x] ;копирует значение из регистра ST0 в операнд-адресат, далее выдвигает стек регистров, освобождая ST0. mov eax, dword[x] invoke WriteConsole,[hout],x,10,ns,NULL invoke ExitProcess,0 section '.idata' import data readable writeable library kernel32,'kernel32.dll',\ user32, 'user32.dll',\ msvcrt, 'msvcrt.dll' include '\api\kernel32.inc' include '\api\user32.inc'
Basisd Раз уж начал бродить по ассемблерным форумам, тогда уж пиши везде одинаково: Пишешь курсовик и тут же сообщаешь