Помогите написать програму для реализации функции синус. Чрез рядТейлора. Если можно с подробным описанием и алгоритмом.
Со щётчика приходит сигнал щётчик 5 розрядный. 1 Чот ето ? Ячейка памяти или наше значение х 2. Програму составил как знал. org 100h mov AX, X ; ЗАНОСИМ ЗНАЧЕНИЕ Х mov [000eh], AX; ЗАПИСЫВАЕМ В ПАМЯТЬ mov DX, X: заносим значение х mul DX: перемножаем значения результат в АХ mul DX; ещё раз перемножаем получаем Х^3 mov [001eh], AX ;переносим в память mul DX: множим дальше результат в АХ mul DX: ещёмножим получаем х^5 результат в АХ mov [002eh], AX ;переносим в память mov AX,[001eh] ;переносим значение х^3 mov BX,006h ;заносим значение 6 в DX div BX,AX ; делим AX на BX результат в AL mov [003eh],AX;переносим результат деления в память mov AX,[002eh] ;переносим значение х^5 mov СX,078h ;заносим значение 120 в CX div CX,AX ; делим AX на CX результат в AL mov [004eh],AX;переносим результат деления в память mov AX,[000eh]; переносим Х в АХ mov ВX,[001eh]; переносим Х^3 в ВХ sub AX,BX ; вычитаем АХ-ВХ результат в АХ mov СX,[002eh]; переносим Х^5 в СХ sub AX,СX ; вычитаем АХ-СХ результат в АХ END Получаем число которое идёт на выход как реализуеться выход ? И сохраняеться ли значение в регистре после его посылки в память (надо обнулять или нет) P.S. ето моя первая прога на асембл. не судите строго ))
У тебя все вычисления в целых числах. Нужно использовать сопроцессор. А иначе будешь получать полную чушь. Не знаю, что тебе посоветовать или мат. анализ лучше выучить или программирование.
Составь таблицу (например с шагом 1 град., ну это смотря на какой диапазон расчитана функция) и не парься. Результат за пару тактов! .... Tabl REAL4 0.0,0..,..,.. ..... mov eax, 0..360 mov eax, Tabl[eax*4]
Код (Text): .386 .model flat,c option casemap:none public sin .code ; ============================================================= sin: ; double sin(double x) _x$ = 4 fld real8 ptr [esp + _x$] fsin ret ; ============================================================= end Взято из WCRT-1.12
Типа эскиз, отлаживать и отлаживать.. Там где вычитание и деление - возможно надо использовать reverse команды, точно не помню что из чего там вычитается, посмотри в Instruction list Код (Text): N equ 10 finit fld dword [x] mov edx,N mov ebx,1 go: mov eax,ebx shl eax,1 dec eax p eax mul ebp mov edx,eax dec edx ;even mul edx mov ebp,eax ;factorial pop eax mov ecx,eax dec eax jz jz1 fstp dword [res] l1: fld dword [res] ; loop l1 ;следите за переполнением mov ecx,eax l2: fmulp ; loop l2 p ebp fild dword [esp] pop ebp fdiv(r)p st1; fld dword [res] test ebx,1 jz jz2 fsubp st1 ; или fsubrb уточни сам,что из чего вычит. jmp jnx jz2: faddp st1 jnx: inc ebx loop go
вижу кучку ошибок в коде и не доработок, на зато забесплатно и главное ведь передать суть..а суть проста,алгоритм не сложный, при маленькой требуемой точности (до x^7)
Уважаемый bask! Посмотрите мои предложения где-то в середине 4-й страницы. Там я задал Ваш вопрос, были различные предложения. Но я привел решение. Желаю успеха!
эмм.. sse/mmx жесть с сайтенга самово intel.com (ток уже не помню гдетам) перекоденая в боле удобный для мну скрипт (и даже местами оптимизированая) http://pastebin.com/f37f846 ааа.. даже отреверсированая на боле менее понятный для мну HLL (после чего долго медитировал за число PI) зы правда мну так и не втупил каким методом он считаеться, а так - тестил на OpenGL демонстрашках зыы да.. Quake1 (на дельфе который ) пахал на уря на втором (hll-овском) варианте.. а за быстродействие sse-mmx по сравнению с темже Fpu-шным в особом восторге не был. хоть и четыре скаляра рубает. одновременно
а, ну по поводу этого, я что-то офтопил в вашей теме "про позабытые спрайты, на MSX Basic'е" http://wasm.ru/forum/viewtopic.php?id=30312 хм.. кстати.. надо будет помедетировать как всетке считали синус байсек интерпретеры.. того времени. ведь как то же считали, без всяких плавучек и таблиц!