|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
11.05.2018, 16:52 | #1 |
Новичок
Джуниор
Регистрация: 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; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Реализуйте с помощью логических операций вставку заданного значения (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 |