Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
AtomicExp
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 5
1

Вычисление выражения по формуле

10.01.2018, 16:25. Просмотров 237. Ответов 1
Метки нет (Все метки)

Составить программу вычисления http://www.cyberforum.ru/cgi-bin/latex.cgi?y=(10*sin({x}_{1})+20*cos({x}_{2}))/x_3^3. Числа вводятся с клавиатуры. Вычисления чисел производить с использованием команд сопроцессора. Результат записать в текстовый файл mult.txt по формату:
Результат =
Числа:
Время:
Студент:
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2018, 16:25
Ответы с готовыми решениями:

Вычисление выражения по формуле
Входные данные необходимо вводить с клавиатуры; результат должен быть выведен на консоль.

Вычисление выражения по формуле
Всем привет, помогите, пожалуйста, вычислить выражение с использованием FPU. Заранее спасибо....

Вычисление выражения по формуле
Добрый день! Подскажите как реализовать на ассемблере nasm программу для высчитывания формулы:...

Вычисление выражения по формуле
Входные данные необходимо вводить с клавиатуры; результат должен быть выведен на консоль.

Вычисление выражения по формуле
На ассемблере решать. Без разницы Tasm,Masm главное было коод и с черным экраном отправьте....

1
ФедосеевПавел
Модератор
4252 / 2341 / 940
Регистрация: 01.02.2015
Сообщений: 7,736
14.01.2018, 22:29 2
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
.486
.model flat, stdcall
option casemap :none
 
        include \masm32\include\windows.inc
 
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        include \masm32\include\masm32.inc
 
        includelib \masm32\lib\user32.lib
        includelib \masm32\lib\kernel32.lib
        includelib \masm32\lib\masm32.lib
 
.data
        aszPromptX1     db      0Dh, 0Ah, 'Enter the X1: ', 0
        aszPromptX2     db      0Dh, 0Ah, 'Enter the X2: ', 0
        aszPromptX3     db      0Dh, 0Ah, 'Enter the X3: ', 0
        aszMsgResult    db      0Dh, 0Ah, 'Result: ', 0
        aszPressLeftAlt db      0Dh, 0Ah, 0Dh, 0Ah, "Press Left Alt to exit", 0
        aszFmt1         db      'Результат = ', 0
        aszFmt2         db      0Dh, 0Ah, \
                                'Числа: 14 января 2018г.', 0Dh, 0Ah, \
                                'Время: 18:40', 0Dh, 0Ah, \
                                'Студент: AtomicExp', 0
        aszFileName     db      'mult.txt', 0
        aszErrorFileOpen        db      'Create file failed', 0
        aszErrorFileWrite       db      'Write file failed', 0
.data?
        X1              dq      ?
        X2              dq      ?
        X3              dq      ?
        Result          dq      ?
        hConsoleOutput  HANDLE  ?
        hConsoleInput   HANDLE  ?
        hFile           HANDLE  ?
        dwBytesWritten  dd      ?
        BufLen          dd      ?
        Buffer          db      1024 dup(?)
 
.code
 
;ввод числа в формате double
ReadFloat       proc    lptrPrompt:DWORD, iLengthPrompt:DWORD, lptrFloat:DWORD
 
        invoke  WriteConsole, hConsoleOutput, lptrPrompt,\
                iLengthPrompt, ADDR BufLen, NULL
        invoke  ReadConsole, hConsoleInput, ADDR Buffer,\
                LENGTHOF Buffer, ADDR BufLen, NULL
        lea     esi,    [Buffer]        ;удаление из буфера
        add     esi,    [BufLen]        ;символов перевода строки
        mov     [esi-2],word ptr 0
        finit
        invoke  StrToFloat, ADDR Buffer, lptrFloat
        ret
ReadFloat       endp
 
main    proc
        ; получение описателей ввода и вывода консоли
        invoke  GetStdHandle,   STD_INPUT_HANDLE
        mov     hConsoleInput,  eax
        invoke  GetStdHandle,   STD_OUTPUT_HANDLE
        mov     hConsoleOutput, eax
        ;очистка экрана
        invoke  ClearScreen
        ;ввод X1
        invoke  ReadFloat,      ADDR aszPromptX1, \
                                LENGTHOF aszPromptX1 - 1, \
                                ADDR X1
        ;ввод X2
        invoke  ReadFloat,      ADDR aszPromptX2, \
                                LENGTHOF aszPromptX2 - 1, \
                                ADDR X2
        ;ввод X3
        invoke  ReadFloat,      ADDR aszPromptX3, \
                                LENGTHOF aszPromptX3 - 1, \
                                ADDR X3
 
        ;вычисление с использованием трансцендентных команд сопроцессора
        finit
        fld     [X1]
        fsin
        fadd    st(0),  st(0)
        fld     st(0)
        fadd    st(0),  st(0)
        fadd    st(0),  st(0)
        faddp   st(1),  st(0)
 
        fld     [X2]
        fcos
        fadd    st(0),  st(0)
        fld     st(0)
        fadd    st(0),  st(0)
        fadd    st(0),  st(0)
        faddp   st(1),  st(0)
        fadd    st(0),  st(0)
 
        faddp   st(1),  st(0)
 
        fld     [X3]
        fld     st(0)
        fmul    st(0),  st(0)
        fmulp   st(1),  st(0)
 
        fdivp   st(1),  st(0)
        ;сохранение результата
        fstp    [Result]
 
        ;вывод результата на экран
        invoke  WriteConsole, hConsoleOutput, ADDR aszMsgResult,\
                LENGTHOF aszMsgResult - 1, ADDR BufLen, NULL
        invoke  FloatToStr2, [Result], ADDR Buffer
        invoke  StrLen, ADDR Buffer
        mov     [BufLen],       eax
        invoke  WriteConsole, hConsoleOutput, ADDR Buffer,\
                BufLen, ADDR BufLen, NULL
        ;сохранение результата в файл
        ;- формирование сообщения
        mov     ecx,    LENGTHOF aszFmt1 - 1
        lea     esi,    [aszFmt1]
        lea     edi,    [Buffer]
        rep     movsb
        invoke  FloatToStr2, [Result], edi
        mov     al,     0
        mov     ecx,    20
        repne   scasb
        mov     ecx,    LENGTHOF aszFmt2 - 1
        lea     esi,    [aszFmt2]
        rep     movsb
        sub     edi,    offset Buffer
        mov     [BufLen],edi
        ;- открытие файла на запись
        mov     [hFile],        INVALID_HANDLE_VALUE
        invoke  CreateFile,\
                        ADDR aszFileName,\              ;file name
                        GENERIC_WRITE,\         ;open for write
                        0,\                     ;do not share
                        NULL,\                  ;default security
                        CREATE_ALWAYS,\         ;overwrite existing
                        FILE_ATTRIBUTE_NORMAL,\ ;normal file
                        NULL                    ;no template
        mov     [hFile],        eax
        cmp     eax,    INVALID_HANDLE_VALUE
        jne     @@WriteToFile
        invoke  WriteConsole, hConsoleOutput, ADDR aszErrorFileOpen,\
                LENGTHOF aszErrorFileOpen - 1, ADDR BufLen, NULL
        jmp     @@CloseFile
@@WriteToFile:
        invoke  WriteFile,      hFile, ADDR Buffer, BufLen,\
                                ADDR dwBytesWritten, NULL
        or      eax,    eax
        jz      @@ErrorWrite
 
        jmp     @@CloseFile
@@ErrorWrite:
        invoke  WriteConsole, hConsoleOutput, ADDR aszErrorFileWrite,\
                LENGTHOF aszErrorFileWrite - 1, ADDR BufLen, NULL
@@CloseFile:
        invoke  CloseHandle,    [hFile]
        ;ожидание нажатия Left Alt
        invoke  WriteConsole, hConsoleOutput, ADDR aszPressLeftAlt,\
                LENGTHOF aszPressLeftAlt - 1, ADDR BufLen, NULL
        @@WaitForLAlt:
                invoke  GetAsyncKeyState, VK_LMENU
                and     eax,    8000h
        jz      @@WaitForLAlt
        ;завершение программы
        invoke  ExitProcess, 0
main    endp
 
end     main
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2018, 22:29

Вычисление выражения по формуле
Помогите изменить код для формулы. Z=\frac{X \cdot Y}{X+Y} st_k segment stack 'stack' ...

Вычисление выражения по формуле
Нужно решить задачу на ассемблере, самую простую.. а я в нем не жу жу. Z=a^2*sqrt((c*d)/b) Вот...

Вычисление выражения по формуле
Входные данные необходимо вводить с клавиатуры; результат должен быть выведен на консоль.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru