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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2018, 16:52   #1
EvanTheShadow
Новичок
Джуниор
 
Регистрация: 11.05.2018
Сообщений: 1
Радость Реализуйте вычисление заданного выражения как ассемблерную вставку в программе на языке C/C++.

Хелпаните, ребята, пожалуйста.
Редактирую код уже который день. Из дома не выхожу, не моюсь. И не понимаю, что не так. Результат ассемблера не совпадает с результатом.
И главное... Все правильно во вставке в Си. Я не понимаю, что не так с ассемблерной частью. Помогите, пожалуйста, буду рад :3

Реализуйте вычисление заданного выражения как ассемблерную вставку в программе на языке C/C++. Все переменные (X, Y) являются целочисленными. A, B, C – массивы.

Sum(|Ai| * |Bi|) * X - Sum(|Ci|) * Y

мой код:
#include<iostream>
#include<cstdlib>

using namespace std;


int readNumber(istream &in)
{
int number;
while (true)
{
in >> number;
if (in.fail())
{
in.clear();
in.ignore(numeric_limits<int>::max( ), '\n');
cout << "Введите число !" << endl;
}
else
{
break;
}
}
return number;
};


int main()
{
setlocale(LC_ALL, "Russian");
cout << "Данная программа реализует вычисления." << endl << "Исходное выражение: sum(|Ai|*|Bi|)*X - sum(|Ci|)*Y" << endl;
cout << "\n";
int A[3];
int B[3];
int C[3];
int X, Y;
int res = 0, res_1 = 0;
int result_1 = 0;
int result_2 = 0;
int sum_C = 0;
int sum = 0;

for (int i = 0; i < 3; ++i)
{
cout << "Введите " << i << " элемент массива A: ";
A[i] = readNumber(cin);
}

int sum_string = 0;
for (int i = 0; i < 3; ++i)
{
cout << "Введите " << i << " элемент массива B: ";
B[i] = readNumber(cin);
}

for (int i = 0; i < 3; i++) {
sum += abs(B[i]) * abs(A[i]);
}

for (int i = 0; i < 3; ++i)
{
cout << "Введите " << i << " элемент массива С: ";
C[i] = readNumber(cin);
sum_C = sum_C + abs(C[i]);
}
cout << "Введите X: ";
X = readNumber(cin);
cout << "Введите Y: ";
Y = readNumber(cin);

result_1 = sum * X;
result_2 = sum_C * Y;
result_1 = result_1 - result_2;
_asm
{
xor eax, eax

lea edx, A
mov ecx, 3
c1:
mov eax, [edx]
test eax, eax
jns m1
neg eax
m1 :
mov[edx], eax
add edx, 4
loop c1

xor eax, eax

lea ebx, B
mov ecx, 3
c2:
mov eax, [edx]
test eax,eax
jns m2
neg eax
m2 :
mov[edx], eax
add edx, 4
loop c2

lea ebx, C
mov ecx, 3
xor eax, eax
c3 :
mov eax, [ebx]
test eax, eax
jge m3
neg eax
m3 :
mov[ebx], eax
add ebx, 4
loop c3

xor eax, eax

lea edx, A
lea ebx, B
mov ecx, 3
c5:
mov eax, [ebx]
add ebx, 4
loop c5
mul[edx]
add[edx], eax
add edx, 4

xor eax, eax

lea ebx, A
mov ecx, 3
c6 :
add eax, [ebx]
add ebx, 4
loop c6

mov ebx, X
imul ebx
mov res_1, eax
xor eax, eax

lea ebx, C
mov ecx, 3
c7 :
add eax, [ebx]
add ebx, 4
loop c7

mov ebx, Y
imul ebx
mov ebx, eax
mov eax, res_1
sub eax, ebx
mov res, eax
}
printf("Result on Asm: %i\n", res);
printf("Result on C++: %i\n", result_1);
system("pause");
return 0;


}
EvanTheShadow вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализуйте с помощью логических операций вставку заданного значения (0 или 1) в любой бит байта со сдвигом влево и... Bartimeus777 Помощь студентам 2 25.03.2018 22:52
- Реализуйте вычисление заданного выражения как ассемблерную вставку в программе на языке высшего уровня ( С++ ). Assembler Ярослав777 Помощь студентам 11 19.11.2016 22:25
Вычисление выражения, заданного формулой (помогите найти ошибку в программе) Sonya888 Паскаль, Turbo Pascal, PascalABC.NET 2 19.02.2014 08:31
Разработать программы на языке Turbo Pascal для вычисления заданного матричного выражения Aspik18 Помощь студентам 0 26.12.2012 14:59
Вывод соседних символов заданного символа: сделать вставку в Си dima_V Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 17.12.2012 21:25