|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
18.11.2016, 18:11 | #1 |
Пользователь
Регистрация: 18.11.2016
Сообщений: 17
|
- Реализуйте вычисление заданного выражения как ассемблерную вставку в программе на языке высшего уровня ( С++ ). Assembler
- Реализуйте вычисление заданного выражения как ассемблерную вставку в программе на языке высшего уровня ( С++ ).
- Программа на языке высшего уровня должна запрашивать значения переменных и выводить результат на экран. - Все переменные (X, Y) являются целочисленными. - A, B – массивы. - Если у массива указан один индекс, значит он одномерный, если два – двумерный. - Индекс i=1..3. знак суммы (|Ai|) * X + знак суммы (Bi) * Y Заранее спасибо #include "stdafx.h" #include <cstdio> #include <conio.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int a, b, x, y, Result; a = 0; b = 0; x = 1; y = 2; Result = 0; int A[3] = {1,2,3}; int Acount = 3; int B[3] = {1,2,3}; int Bcount = 3; _asm { xor eax, eax mov ecx, Acount //добавляем в счетчик длину массива lea esi, A //находим адрес начала массива Acycle: mov eax, [esi] //берем значение из массива mark1: //берем модуль neg eax //берем модуль числа из массива js mark1 //берем модуль add a, eax //считаем суму элементов add esi, 4 //сдвигаемся по адресу loop Acycle //тут в переменной а будет сумма mov eax, a //готовимся умножать a imul eax, x //a*x mov a, eax //возвращаем результат в a xor eax, eax mov ecx, Bcount //добавляем в счетчик длину массива lea esi, B //находим адрес начала массива Bcycle: mov eax, [esi] //берем значение из массива mark2: //берем модуль neg eax //берем модуль числа из массива js mark2 //берем модуль add b, eax //считаем суму элементов add esi, 4 //сдвигаемся по адресу loop Bcycle //тут в переменной в будет сумма mov eax, b //готовимся умножать в imul eax, y //b*y mov b, eax //возвращаем результат в b }; printf("C_Result = %d\n", x); printf("ASM_A = %d\n", a); printf("ASM_B = %d\n", b); printf("ASM_Result = %d\n", Result); return 0; } Последний раз редактировалось Ярослав777; 18.11.2016 в 18:40. |
18.11.2016, 23:42 | #2 |
Пользователь
Регистрация: 13.11.2016
Сообщений: 84
|
А проблема собственно в чем?
|
19.11.2016, 08:12 | #3 |
Пользователь
Регистрация: 18.11.2016
Сообщений: 17
|
Надо поправить код до рабочего, я на 1 курсе заочно, поэтому еще не въехал в тему... Если есть возможность, помогите или укажите где подправить...
|
19.11.2016, 11:22 | #4 |
Пользователь
Регистрация: 13.11.2016
Сообщений: 84
|
Код рабочий, все компилируется.
|
19.11.2016, 19:54 | #5 |
Пользователь
Регистрация: 18.11.2016
Сообщений: 17
|
Прости что отнимаю время, но само решение задачи неверно...
знак суммы (|Ai|) * X + знак суммы (Bi) * Y Нужно чтобы результат с++, совпадал с ассемблеровским... |
19.11.2016, 20:31 | #6 |
Пользователь
Регистрация: 13.11.2016
Сообщений: 84
|
А где у Вас результат с++, а где ассемблеровский? У Вас только вывод в с (с++ это тяжело назвать), а все вычисления в асме, так что с чем сравнивать здесь тяжело понять. Если Вы имеете ввиду, что Result = 0, то как Вы его обозначили в начале программы нулем, так Вам программа его и выводит нулем. Вы же его нигде потом не изменяете. Как выводите
так вам и выводится 1, так как обозначили x = 1 в начале. Объясните грамотно, что Вас не устраивает. |
19.11.2016, 21:35 | #7 |
Пользователь
Регистрация: 18.11.2016
Сообщений: 17
|
)))Я и попросил подправить код, чтобы он был отождествлен с
выражением: знак суммы (|Ai|) * X + знак суммы (Bi) * Y, я заочник пока времени нет вникать, а зачет уже на носу... Я подумал, что нас просят написать код, не вдаваясь в подробности, значит он логически прост... Но я, даже C++ не знаю, не говоря об АСМЕ))). Просто прошу помощи кому не трудно... |
19.11.2016, 21:46 | #8 |
Пользователь
Регистрация: 13.11.2016
Сообщений: 84
|
А код кто тогда писал вышеизложенный?
|
19.11.2016, 22:02 | #9 |
Пользователь
Регистрация: 18.11.2016
Сообщений: 17
|
Частично я (это где ошибки), остальное взял из готового примера другого варианта...
|
19.11.2016, 22:05 | #10 |
Пользователь
Регистрация: 18.11.2016
Сообщений: 17
|
Надо сделать еще ввод с клавы...
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вычисление выражения, заданного формулой (помогите найти ошибку в программе) | Sonya888 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 19.02.2014 08:31 |
Выполнить подсчёт выражения в ассемблере вставкой _asm в языке высокого уровня | TikTak93 | Помощь студентам | 12 | 29.11.2013 14:11 |
Реализуйте афинную систему подстановок Цезаря. При A=12, B=7. в любой программе программирования.. | mariy337 | Помощь студентам | 2 | 15.01.2013 21:07 |
Разработать программы на языке Turbo Pascal для вычисления заданного матричного выражения | Aspik18 | Помощь студентам | 0 | 26.12.2012 14:59 |
Assembler(Вычисление значений выражения) | Ric | Помощь студентам | 0 | 06.04.2012 20:44 |