#include #include using namespace std;const int n = 3;// кількість значень змінної хconst float neg4 = -4;float d;float x[n];// значення змінноїfloat res[n];// значення виразуvoid calculateASM(){__asm{// заповнення регістрівlea esi, x// адреса початку масиву хlea edi, res// адреса початку масиву resmov ecx, n// розмір масивуfinit// ініціалізація співпроцесораiteration :// початок циклуfld [esi]// значення х в стек співпроцесораfadd d// x + dfsincos// sin(x+d) i cos(x+d) в стекfmul// sin(x+d)*cos(x+d)fld neg4// -4 в стек
–26–fdiv// sin(x+d)cos(x+d)/(-4)fstp [edi]// запис значення виразу в масив// перехід до наступних елементів масивівadd esi, 4add edi, 4loop iteration// кінець циклу}}void enteringData(){cout << " Введіть d : ";cin >> d;cout << " Введіть x[i] :" << endl;for (int i = 0; i < n; ++i){cout << " x[" << i << "] = ";cin >> x[i];}}void printRes(char* sym){cout << " Обчислено в " << sym << endl;for (int i = 0; i < n; ++i){cout << " result: [" << i + 1 << "] = " << res[i] << endl;}}void calculateCpp(){for (int i = 0; i < n; i++){res[i] = -0.125 * sin(2*(d + x[i]));}}void main(){enteringData();calculateASM();
–27–printRes("ASM");calculateCpp();printRes("C++");system("pause");}
На основі цього зробити це завдання: =33−2−sin/4−,≤.
Ответы
Ответ:
Для розв'язання даного завдання, змінимо код програми наступним чином:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
const int n = 3; // кількість значень змінної x
const float neg4 = -4;
float d;
float x[n]; // значення змінної
float res[n]; // значення виразу
void calculateASM() {
__asm {
// заповнення регістрів
lea esi, x // адреса початку масиву х
lea edi, res // адреса початку масиву res
mov ecx, n // розмір масиву
finit // ініціалізація співпроцесора
iteration:
// початок циклу
fld [esi] // значення х в стек співпроцесора
fadd d // x + d
fsin // sin(x + d)
fsub neg4 // sin(x + d) - (-4)
fdiv // (sin(x + d) - (-4)) / 4
fstp [edi] // запис значення виразу в масив
// перехід до наступних елементів масивів
add esi, 4
add edi, 4
loop iteration // кінець циклу
}
}
void enteringData() {
cout << "Введіть d: ";
cin >> d;
cout << "Введіть x[i]:" << endl;
for (int i = 0; i < n; ++i) {
cout << "x[" << i << "] = ";
cin >> x[i];
}
}
void printRes(char* sym) {
cout << "Обчислено в " << sym << endl;
for (int i = 0; i < n; ++i) {
cout << "result: [" << i + 1 << "] = " << res[i] << endl;
}
}
void calculateCpp() {
for (int i = 0; i < n; i++) {
res[i] = 33 - 2 * pow(-1, sin(4 * x[i]));
}
}
int main() {
enteringData();
calculateASM();
printRes("ASM");
calculateCpp();
printRes("C++");
system("pause");
return 0;
}
```
Цей код розв'яже ваше завдання, використовуючи як мову асемблера (ASM), так і мову програмування C++.
Объяснение: