Реализация функции синус

Тема в разделе "WASM.ASSEMBLER", создана пользователем bask, 13 июн 2009.

  1. bask

    bask New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    2
    Помогите написать програму для реализации функции синус. Чрез рядТейлора. Если можно с подробным описанием и алгоритмом.
     
  2. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    в чем трудность?
     
  3. bask

    bask New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2009
    Сообщения:
    2
    Со щётчика приходит сигнал щётчик 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. ето моя первая прога на асембл. не судите строго ))
     
  4. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    У тебя все вычисления в целых числах. Нужно использовать сопроцессор. А иначе будешь получать полную чушь. Не знаю, что тебе посоветовать или мат. анализ лучше выучить или программирование.
     
  5. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Составь таблицу (например с шагом 1 град., ну это смотря на какой диапазон расчитана функция) и не парься.
    Результат за пару тактов!
    ....
    Tabl REAL4 0.0,0..,..,..
    .....
    mov eax, 0..360
    mov eax, Tabl[eax*4]
     
  6. perdimonokl

    perdimonokl New Member

    Публикаций:
    0
    Регистрация:
    18 сен 2007
    Сообщения:
    38
    Код (Text):
    1. .386
    2. .model flat,c
    3.  
    4. option casemap:none
    5.  
    6. public sin
    7.  
    8. .code
    9.  
    10. ; =============================================================
    11.  
    12. sin:
    13.     ; double sin(double x)
    14.  
    15.     _x$ = 4
    16.  
    17.     fld   real8 ptr [esp + _x$]
    18.     fsin
    19.  
    20.     ret
    21.  
    22. ; =============================================================
    23.  
    24. end
    Взято из WCRT-1.12
     
  7. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    Типа эскиз, отлаживать и отлаживать.. Там где вычитание и деление - возможно надо использовать reverse команды, точно не помню что из чего там вычитается, посмотри в Instruction list
    Код (Text):
    1. N equ 10
    2. finit
    3. fld dword [x]
    4. mov edx,N
    5. mov ebx,1
    6.  
    7. go:
    8. mov eax,ebx
    9. shl eax,1
    10. dec eax
    11. p eax
    12. mul ebp
    13. mov edx,eax
    14. dec edx ;even
    15. mul edx
    16. mov ebp,eax ;factorial
    17. pop eax
    18. mov ecx,eax
    19. dec eax
    20. jz jz1
    21. fstp dword [res]
    22. l1:
    23. fld dword [res] ;
    24. loop l1  ;следите за переполнением
    25. mov ecx,eax
    26. l2:
    27. fmulp ;
    28. loop l2
    29. p ebp
    30. fild dword [esp]
    31. pop ebp
    32. fdiv(r)p st1;
    33. fld dword [res]
    34. test ebx,1
    35. jz jz2
    36. fsubp st1 ; или fsubrb уточни сам,что из чего вычит.
    37. jmp jnx
    38. jz2:
    39. faddp st1
    40. jnx:
    41. inc ebx
    42. loop go
     
  8. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    А ряд тейлора для синуса достаточно прост
    x - x^3/3! + x^5/5! - ...
     
  9. rdtsc

    rdtsc Параллелепипедов Артем

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    180
    Адрес:
    Москва
    вижу кучку ошибок в коде и не доработок, на зато забесплатно и главное ведь передать суть..а суть проста,алгоритм не сложный, при маленькой требуемой точности (до x^7)
     
  10. 1212

    1212 New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2009
    Сообщения:
    21
    Уважаемый bask!
    Посмотрите мои предложения где-то в середине 4-й страницы. Там я задал Ваш вопрос, были различные предложения. Но я привел решение.
    Желаю успеха!
     
  11. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    эмм.. sse/mmx жесть с сайтенга самово intel.com (ток уже не помню гдетам) перекоденая в боле удобный для мну скрипт (и даже местами оптимизированая)
    http://pastebin.com/f37f846
    ааа.. даже отреверсированая на боле менее понятный для мну HLL (после чего долго медитировал за число PI)
    зы
    правда мну так и не втупил каким методом он считаеться, а так - тестил на OpenGL демонстрашках
    зыы
    да.. Quake1 (на дельфе который ) пахал на уря на втором (hll-овском) варианте.. а за быстродействие sse-mmx по сравнению с темже Fpu-шным в особом восторге не был. хоть и четыре скаляра рубает. одновременно
     
  12. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    bugaga
    Они написали ДВЕ кваки?! ДОСовский - точно на DJGPP был написан.
     
  13. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    а, ну по поводу этого, я что-то офтопил в вашей теме "про позабытые спрайты, на
    MSX Basic'е"
    http://wasm.ru/forum/viewtopic.php?id=30312

    хм.. кстати.. надо будет помедетировать как всетке считали синус байсек интерпретеры.. того времени. ведь как то же считали, без всяких плавучек и таблиц!