Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2021, 01:00   #1
Куркума
Новичок
Джуниор
 
Регистрация: 10.12.2021
Сообщений: 1
По умолчанию Assembler - реккурентную формулу для sin(x) - только один вызов sincos. Есть и .data и .code и вывод результата

нужен фрагмент программы с .data и .code
для данной на картинке суммы
Изображения
Тип файла: png сумма.png (5.5 Кб, 20 просмотров)
Куркума вне форума Ответить с цитированием
Старый 10.12.2021, 12:15   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,551
По умолчанию

Ни фига се! Плавучка, да с функцией - и на асме! Во ФРИЛАНСЕ за такое не хилых бабок затребуют. Хотя бы синус библиотечный можно использовать, не кропать же его на асме?
digitalis вне форума Ответить с цитированием
Старый 10.12.2021, 13:38   #3
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Ни фига се! Плавучка, да с функцией - и на асме! Во ФРИЛАНСЕ за такое не хилых бабок затребуют. Хотя бы синус библиотечный можно использовать, не кропать же его на асме?
Зачем если есть команда встроенная?

Код:
TITLE	No_name
.586P
.MODEL          FLAT, NOLANGUAGE
LOCALS @@
include system.asm

Code	SEGMENT	PARA PUBLIC "code" USE32
Assume ds:Data
Main:
		CALL _start
		PUSH ECX
		FILD t
		FSTP S
@@Label:
		PUSH ECX
		MOV EAX, 1
		LEA EBX, x
		MOV DWord PTR [EBX], EAX
		MOV ECX, x
@@For:
		MOV EAX, 10
		CMP ECX, EAX
		JG @@LoopEnd
		PUSH ECX
		FILD x
		FSIN
		FLD S
		FADDP
		FSTP S
		POP  ECX
		INC x
		INC ECX
		JMP @@For
@@LoopEnd:
		POP  ECX
@@Label0:
		POP  ECX
		CALL _halt
Code	ENDS
Data	SEGMENT	DWORD PUBLIC "data" 
S 		DQ 0
x 		DD 0
t		DD 0        	; [Const]
Data	ENDS
END Main
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 10.12.2021, 14:37   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,551
По умолчанию

Не увидел я там обращения к синусу. И вывода на экран float. Расчёт без вывода результатов - что пиво без водки = деньги на ветер.
Но моё знакомство с РС-шным асмом ограничилось только целочисленными операциями под ДОСом
Всё-таки польза есть: спровоцировал дискуссию на тему "это не просто" - и ТС получил результат
digitalis вне форума Ответить с цитированием
Старый 10.12.2021, 20:22   #5
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Или так, через реккурентную формулу для sin(x) - только один вызов sincos.
Есть и .data и .code и вывод результата
Код:
.686
.model flat, stdcall
option casemap :none
        .nolist
        include \masm32\include\windows.inc

        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        include \masm32\include\msvcrt.inc
        include \masm32\include\masm32.inc
        include \masm32\macros\macros.asm

        includelib \masm32\lib\user32.lib
        includelib \masm32\lib\kernel32.lib
        includelib \masm32\lib\msvcrt.lib
        includelib \masm32\lib\masm32.lib

        .list
.data
.data?
        Result          dq      ?
.code

main    proc

        finit

        fld1
        fsincos

        ;fldz
        ;fsincos
        fldz
        fld1

        fldz

        ;st(0) - сумма ряда
        ;st(1) - cosP
        ;st(2) - sinP
        ;st(3) - cosT
        ;st(4) - sinT
        mov     ecx,    10
        @@for:
                ;cosN := cosP * cosT - sinP * sinT
                fld     st(1)
                fmul    st(0),  st(4)
                fld     st(3)
                fmul    st(0),  st(6)
                fsubp   st(1),  st(0)
                ;sinN := sinP * cosT + cosP * sinT
                fld     st(3)
                fmul    st(0),  st(5)
                fld     st(3)
                fmul    st(0),  st(7)
                faddp   st(1),  st(0)
                ;s := s + sinN
                fadd    st(2),  st(0)
                ;sinP := sinN
                ;cosP := cosN
                fstp    st(4)
                fstp    st(2)

        loop    @@for
        ;сохранение результата
        fstp    [Result]                ;значение суммы

        printf("%fl\n", [Result])

        invoke  crt__getch
        ;завершение программы
        invoke  ExitProcess, 0
main    endp

end     main
FPaul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод букв, встречающихся в каждом слове только один раз. Misha95 C# (си шарп) 0 27.11.2015 22:48
Пусть задано значение X. Найти первое из чисел sin X, sin sin X, sin sin sin X, ... , меньшее по модулю 10-4. hex_91 Visual C++ 1 28.04.2012 23:49
Паскаль Вычислить у - первое из чисел sin х, sin sin x, sin sin sin x, ..., меньшее по модулю 10-4 Kikikiss Помощь студентам 2 25.03.2012 13:58
Вывод на экран символов, которые встречаются только один раз. Tsunami C++ Builder 1 10.04.2011 19:00
[C++ Builder 6] Вывод на экран символов, которые встречаются только один раз. Tsunami Помощь студентам 0 07.04.2011 09:21