Хочу написать черезвычайно сложную программу! шучу Просто помогите собрать всё вместе? Суть в том, что нужно чтобы считало: 440,0 умножить на (корень степени m из числа 2 в степени n); где m=11, n = {0,1,2,3... 9,10,11} И вывести результат в файл C:\row.txt в виде например, записи "в столбик" или даже не важно, лишь бы читабельно было. Результат нужен с округлением до сотых - 1.00 два знака после запятой, больше не нужно, но результат должен быть точным. Инструмент - fasmw, ось - win32 Наверное, надо сначала создать каркас проги которая просто пишет в C:\row.txt ? На msdn какие-то вызовы есть же CreateFile, WriteFile ? Я на правильном пути =) ? Но далее что-то с лупами замутить, хотя тут наверное алгоритмов несколько бывает? И самое страшное, корни и степени! И типы данных... я по тасму для дос читал, нифига не ясно! Собсно не знаю какие типы подойдут в этом случае... (всмысле результат до сотых ведь округляю) Но и как запятая там указывается, тоже не пойму... Может есть примерчики на умножение, корни итп. ? хотяб для tasm ? Да даже си попрёт, только не очень хотелось б. Пожалуйста, поучаствуйте в "проекте" :] PS забыл, ещё лучше бы было зделать интерактивное консоль-приложение, типа чтоб различные m/n можно было задать, но хотя и перекампилить не проблемма в каждый случай...
ну смотри. начнем сначала CreateFileA - создали/открыли файл wsprintfA - перевели числа в строку WriteFile - записали CloseHandle - закрыли Если открыть файл с именем CON будет выводить в консоль далее. 2 в степени n это 1 << n для фасма Код (Text): mov eax, 1 mov ecx, [n] shl eax, cl а вот с корнями по сложнее. придется мучать FPU типа Код (Text): fldln2 push eax fidiv dword [esp];number mov [esp], edx fld1 fyl2y fidiv dword [esp];power fabs fmulp fldl2e fmulp fld st0 frndint fsub st1, st0 f2xm1 fld1 faddp fscale fstp st1 fstp st0 fstp dword [esp] ну а теперь все вместе Код (Text): stdcall [CreateFileA], FName, GENERIC_WRITE, 7, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0 cmp eax, INVALID_HANDLE_VALUE jz error mov ebx, eax mov ecx, 12;max power + 1 mov eax, 1 shl eax, cl finit @@: shr eax, 1 dec ecx fldln2 push eax fild dword [esp];number mov [esp], edx fld1 fyl2x fidiv dword [esp];power fabs fmulp fldl2e fmulp fld st0 frndint fsub st1, st0 f2xm1 fld1 faddp fscale fstp st1 fstp st0 fstp dword [esp] and ecx, ecx jnz @b stdcall [wsprintfA], BufferStr, FormatStr stdcall [WriteFile], ebx, BufferStr, eax, [b]esp, 0[/b];не советую этим злоупотреблять! stdcall [CloseHandle], ebx formatstr:12 times db '%-5.2f', 13, 10 и все. без оформления, но полностью (еще меточку error поставь и опиши) З.Ы. Писал сходу. могут быть не большие глюки (а могут быть и большие алгоритм степени взял по памяти, но по моему он для целых степеней только катит)
Ура! Спасибо огромное! Такое начало, сразу! +1 Я правда тупой, может потребоваться продолжение, но пока отлично! Кстати, я текст нашёл рульный про на pblog.ru про FPU кароче, причём под фасм!!!