Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 14.11.2021
Сообщений: 20
1

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

20.12.2021, 14:40. Показов 1038. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
.586
.MODEL FLAT, C
.DATA
buffer dq 0
.CODE
calc proc C qq,x:qword
 
finit
 
fld x ; ST(0) = x
fld x ; ST(0) = x, ST(1) = x
 
fmul ST(0), ST(1) ; ST(0) = x^2, ST(1) = x
fmul ST(0), ST(1) ; ST(0) = x^3, ST(1) = x
fmul ST(0), ST(1) ; ST(0) = x^4, ST(1) = x
 
 
fld1 ; ST(0) = 1, ST(1) = x^4, ST(2) = x
fsub ST(1), ST(0) ; ST(0) = 1, ST(1) = x^4 - 1, ST(2) = x
 
 
fxch ST(1) ; ST(0) = x^4 - 1, ST(1) = 1, ST(2) = x
fabs ; ST(0) = abs(x^4 - 1), ST(1) = 1, ST(2) = x
 
fyl2x ; ST(0) = log_2(abs(x^4 - 1)), ST(1) = x
 
fld1; ST(0) = 1, ST(1) = log_2(abs(x^4 - 1)), ST(2) = x
fld1; ST(0) = 1, ST(1) = 1, ST(2) = log_2(abs(x^4 - 1)), ST(3) = x
fadd ST(1), ST(0); ST(0) = 1, ST(1) = 2, ST(2) = log_2(abs(x^4 - 1)), ST(3) =x
fld x; ST(0) = x, ST(1) = 1, ST(2) = 2, ST(3) = log_2(abs(x^4 - 1)), ST(4) =x
fsin ; ST(0) = sin(x), ST(1) = 1, ST(2) = 2, ST(3) = log_2(abs(x^4 - 1)), ST(4) =x
fmul ST(0), ST(2); ST(0) = 2sin(x), ST(1) = 1, ST(2) = 2, ST(3) = log_2(abs(x^4 - 1)), ST(4) =
 
fmul ST(0), ST(3); ST(0) = 2sin(x)*log_2(abs(x^4 - 1)), ST(1) = 1, ST(2) = 2, ST(3) = log_2(abs(x^4 - 1)), ST(4) =x
 
fadd ST(0), ST(1); ST(0) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(1) = 1, ST(2) = 2, ST(3) = log_2(abs(x^4 - 1)), ST(4) =x
 
;Вычисляем знаменатель
fldpi ; ST(0) = PI, ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 2, ST(4) = log_2(abs(x^4 - 1)), ST(5) =x
fmul ST(0), ST(3); ST(0) = 2PI, ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 2, ST(4) = log_2(abs(x^4 - 1)), ST(5) =x
fxch ST(5); ST(0) = x, ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 2, ST(4) = log_2(abs(x^4 - 1)), ST(5) =2PI
fmul ST(0), ST(3); ST(0) = 2x, ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 2, ST(4) = log_2(abs(x^4 - 1)), ST(5) =2PI
fsin; ST(0) = sin(2x), ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 2, ST(4) = log_2(abs(x^4 - 1)), ST(5) =2PI
 
fxch ST(3);ST(0) = 2, ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = sin(2x), ST(4) = log_2(abs(x^4 - 1)), ST(5) =2PI
 
fadd ST(0), ST(2);ST(0) = sin(2x), ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 3, ST(4) = log_2(abs(x^4 - 1)), ST(5) =2PI
fadd ST(0), ST(2);ST(0) = sin(2x), ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 4, ST(4) = log_2(abs(x^4 - 1)), ST(5) =2PI
fadd ST(0), ST(2);ST(0) = sin(2x), ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 5, ST(4) = log_2(abs(x^4 - 1)), ST(5) =2PI
fadd ST(0), ST(2);ST(0) = sin(2x), ST(1) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(2) = 1, ST(3) = 6, ST(4) = log_2(abs(x^4 - 1)), ST(5) =2PI
fxch ST(3);
fldpi; ST(0) = PI, ST(1) = sin(2x), ST(2) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(3) = 1, ST(4) = 6, ST(5) = log_2(abs(x^4 - 1)), ST(6) =2PI
fdiv ST(0), ST(4); ST(0) = PI/6, ST(1) = sin(2x), ST(2) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(3) = 1, ST(4) = 6, ST(5) = log_2(abs(x^4 - 1)), ST(6) =2PI
fadd ST(0), ST(1); ST(0) = PI/6 + sin(2x), ST(1) = sin(2x), ST(2) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(3) = 1, ST(4) = 6, ST(5) = log_2(abs(x^4 - 1)), ST(6) =2PI
fdiv ST(6), ST(0); ST(0) = PI/6 + sin(2x), ST(1) = sin(2x), ST(2) = 2sin(x)*log_2(abs(x^4 - 1))+1, ST(3) = 1, ST(4) = 6, ST(5) = log_2(abs(x^4 - 1)), ST(6) =2PI/(PI/6 + sin(2x))
fxch ST(2)
 
fdiv ST(0), ST(6); ST(0) = PI/6 + sin(2x), ST(1) = sin(2x), ST(2) = (2sin(x)*log_2(abs(x^4 - 1))+1)/2PI/(PI/6 + sin(2x)), ST(3) = 1, ST(4) = 6, ST(5) = log_2(abs(x^4 - 1)), ST(6) =2PI/(PI/6 + sin(2x))
 
fxch ST(2)
fxch ST(2); ST(0) = (2sin(x)*log_2(abs(x^4 - 1))+1)/2PI/(PI/6 + sin(2x)), ST(1) = sin(2x), ST(2) = PI/6 + sin(2x), ST(3) = 1, ST(4) = 6, ST(5) = log_2(abs(x^4 - 1)), ST(6) =2PI/(PI/6 + sin(2x))
fxch ST(6); ST(0) = 2PI/(PI/6 + sin(2x)), ST(1) = sin(2x), ST(2) = PI/6 + sin(2x), ST(3) = 1, ST(4) = 6, ST(5) = log_2(abs(x^4 - 1)), ST(6) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fstp buffer;  ST(0) = sin(2x), ST(1) = PI/6 + sin(2x), ST(2) = 1, ST(3) = 6, ST(4) = log_2(abs(x^4 - 1)), ST(5) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fstp buffer; ST(0) = PI/6 + sin(2x), ST(1) = 1, ST(2) = 6, ST(3) = log_2(abs(x^4 - 1)), ST(4) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fstp buffer; ST(0) = 1, ST(1) = 6, ST(2) = log_2(abs(x^4 - 1)), ST(3) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fstp buffer;ST(0) = 6, ST(1) = log_2(abs(x^4 - 1)), ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fstp buffer;ST(0) = log_2(abs(x^4 - 1)), ST(1) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
 
fld1; ST(0) = 1, ST(1) = log_2(abs(x^4 - 1)), ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fdivr ST(1), ST(0); ST(0) = 1, ST(1) = 1/(log_2(abs(x^4 - 1))), ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fxch ST(1); ST(0) = 1/(log_2(abs(x^4 - 1))), ST(1) = 1, ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fpatan; ST(0) = 1/(log_2(abs(x^4 - 1))), ST(1) = arctg(log_2(abs(x^4 - 1))) ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fstp buffer;  ST(0) = arctg(log_2(abs(x^4 - 1))) ST(1) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fld1;ST(0) = 1, ST(1) = arctg(log_2(abs(x^4 - 1))) ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fmul ST(0), ST(1); ST(0) = arctg(log_2(abs(x^4 - 1))), ST(1) = arctg(log_2(abs(x^4 - 1))) ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fmul ST(1), ST(0);ST(0) = arctg(log_2(abs(x^4 - 1))), ST(1) = (arctg(log_2(abs(x^4 - 1))))^2, ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x)))
fxch ST(2)
 
fsub ST(0), ST(1);ST(0) = arctg(log_2(abs(x^4 - 1))), ST(1) = (arctg(log_2(abs(x^4 - 1))))^2, ST(2) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x))) - (arctg(log_2(abs(x^4 - 1))))^2
fxch ST(2)
 
fstp buffer;ST(0) = (arctg(log_2(abs(x^4 - 1))))^2, ST(1) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x))) - (arctg(log_2(abs(x^4 - 1))))^2
fstp buffer;ST(0) =(2sin(x)*log_2(abs(x^4 - 1))+1)/(2PI/(PI/6 + sin(2x))) - (arctg(log_2(abs(x^4 - 1))))^2
;fstp qq;
 
ret
 
calc ENDP
END

C++
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
#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
 
using namespace std;
 
extern "C" {
    double calc(double);
}
//extern "C" double condition(double);
double result, x, qq;
int main() {
 
 
    cout << "Input x -> ";
 
    cin >> x;
 
    cout << endl << "The first task:" << endl;
 
    result = (2 * sin(x) * (log2(abs(pow(x, 4) - 1))) + 1) / ((2 * M_PI)/(sin(2*x) + (M_PI/ 6))) - pow(atan(log2(abs(pow(x, 4)))), 2);
 
    //result = sqrt(pow(2, x * x * cos(sqrt(pow(x, 8) + 1)))) / (2 * sin(x) * log2(2 * tan(x))) - pow(cos(x - 1), 2);
 
    cout << "(C++) result -> " << result << endl;
 
    calc(x);
 
    cout << "(Assembler) result -> " << qq << endl;
 
 
 
 
    return 0;
}

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


Он выводит 0, при всех значениях. Я не пойму что с ним вообще происходит. Помогите пожалуйста, укажите что нужно исправить и как, прошу. Заранее всем спасибо

Вычислить выражение по формуле
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2021, 14:40
Ответы с готовыми решениями:

Вычислить выражение по формуле
Cделать 2 программы одна - для без знаковых, другая - знаковых. Y=(8A^2-4A*C)/B

Вычислить выражение по формуле
Написал на с++, макрос __asm, пишет в строке div недопустимое число операндов, срочно помогите,...

Вычислить выражение по формуле
Помогите, пожалуйста, вычислить выражение по формуле на ассемблере L = (A - 1)2 (1 + J) 2 / (1 - J)...

Вычислить выражение по формуле
Помогите решить данную задачу для ТАSM, прошу Вас!:cry:

2
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
20.12.2021, 17:20 2
Думаю, что проблемы в нарушении соглашения о передаче параметров в подпрограмму.
Для начала, количество параметров в описании процедуры - два, а в прототипе на "C" - один.
Возвращение результата функции из подпрограммы - в вершине стека.
1
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
20.12.2021, 19:12 3
Tasl, держите полностью на С++ с асмовской вставкой. Сделаете из вставки асмовский модуль.
C++
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
#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
 
using namespace std;
 
 
double calc(double x)
{
    double buffer;
    int C2 = 2;
    int C6 = 6;
    __asm
    {
        finit
 
        fld x               // ST(0) = x
        fld ST              // ST(0) = x, ST(1) = x
 
        fmul ST, ST(1)      // ST(0) = x ^ 2, ST(1) = x
        fmul ST, ST         // ST(0) = x ^ 4, ST(1) = x //сразу нельзя?
 
 
        fld1                // ST(0) = 1, ST(1) = x ^ 4, ST(2) = x
        fsub ST(1), ST      // ST(0) = 1, ST(1) = x ^ 4 - 1, ST(2) = x
 
 
        fxch ST(1)          // ST(0) = x ^ 4 - 1, ST(1) = 1, ST(2) = x
        fabs                // ST(0) = abs(x ^ 4 - 1), ST(1) = 1, ST(2) = x
        fyl2x               // ST(0) = log2(abs(x ^ 4 - 1)), ST(1) = x
        
        fld1                // ST(0) = 1, ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = x
        fld st(2)           // ST(0) = x, ST(1) = 1, ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        fsin                // ST(0) = sin(x), ST(1) = 1, ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        fimul C2            // ST(0) = 2sin(x), ST(1) = 1, ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        fmul ST, ST(2)      // ST(0) = 2sin(x)*log_2(abs(x ^ 4 - 1)), ST(1) = 1, ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        faddp ST(1), ST     // ST(0) = 2sin(x)*log_2(abs(x ^ 4 - 1)) + 1 = (*), ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = x
 
        ; Вычисляем знаменатель
        fldpi               // ST(0) = PI, ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        fimul C2            // ST(0) = 2PI, ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        
        fxch ST(3)          // ST(0) = x, ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = 2PI
        fimul C2            // ST(0) = 2x, ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = 2PI
        fsin                // ST(0) = sin(2x), ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = 2PI
        fldpi               // ST(0) = PI, ST(1) = sin(2x), ST(2) = (*), ST(3) = log_2(abs(x ^ 4 - 1)), ST(4) = 2PI
        fidiv C6            // ST(0) = PI/6, ST(1) = sin(2x), ST(2) = (*), ST(3) = log_2(abs(x ^ 4 - 1)), ST(4) = 2PI
        faddp ST(1), ST     // ST(0) = PI/6 + sin(2x), ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = 2PI
        fdivp ST(3), ST     // ST(0) = (*), ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = 2PI/(PI/6 + sin(2x)) = (**)
        fxch ST(2)          // ST(0) = (**), ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = (*)
        fdivp ST(2), ST     // ST(0) = log_2(abs(x ^ 4 - 1)), ST(1) = (*)/(**) = (***)
 
        fld1                // ST(0) = 1, ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = (*)/(**) = (***)
        fpatan              // ST(0) = atan(log_2(abs(x ^ 4 - 1))/1), ST(1) = (***)
        fmul ST, ST         // ST(0) = atan^2(log_2(abs(x ^ 4 - 1))/1), ST(1) = (***)
        fsubp st(1), st     // ST(0) = (***) - atan^2()
                            // st(0) - result
    }
}
 
int main() {
 
    double x, resultC, resultA;
    cout << "Input x -> ";
 
    cin >> x;
 
    cout << endl << "The first task:" << endl;
 
    resultC = (2 * sin(x) * (log2(abs(pow(x, 4) - 1))) + 1) / ((2 * M_PI) / (sin(2 * x) + (M_PI / 6))) - pow(atan(log2(abs(pow(x, 4)-1))), 2);
 
    cout << "(C++) result -> " << resultC << endl;
 
    resultA = calc(x);
 
    cout << "(Assembler) result -> " << resultA << endl;
 
    return 0;
}
1
20.12.2021, 19:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2021, 19:12
Помогаю со студенческими работами здесь

Вычислить выражение по формуле
Задание: для отчета студенту необходимо решить задачи своего варианта, а также уметь рабо- тать с...

Вычислить выражение по формуле
((b/2)+(53/c))/(b-(a*c) - 1) Как это записать в .asm файл, я накидал чего-то, но это не логичный...

Вычислить выражение по формуле
Всем привет. Помогите пожалуйста с вычислением простой формулы в Assembler, желательно с...

Вычислить выражение по формуле
(a+2*b)/(b-1) на ассемблер как написать? оч срочно. спасибо Добавлено через 22 минуты начало...

Вычислить выражение по формуле
;X=K-B2/C1+D3+E2*F2 DOSSEG .MODEL SMALL ;-------------------------------------------; MY_MUL ...

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

Вычислить выражение по формуле
Добрый день, помогите сделать несколько лабораторных по ассемблеру 1. &lt;-- CH - DH + + 9


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru