Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс для pаботы с массивом Доброго вечера, господа! Очень прошу помощи в написании кода. Было у меня задание такого рода: "Постpоить класс для pаботы с массивом. Класс должен включать соответствующие поля: мак-симальный... https://www.cyberforum.ru/ cpp-beginners/ thread1327086.html Работа с файлами С++ Строки заменить сроку другим числом! C++
Дан файл из 5 строк как сделать чтобы можно было заменить любую сроку 1 2 3 или 5 на другое число 1236547 6654879 2312364 и т.д
C++ Вывод N целых чисел, сумма которых равна 0 Дано число N, кратное 4. Требуется написать программу, выводящую N целых чисел, сумма которых равна 0, а произведение равно N. https://www.cyberforum.ru/ cpp-beginners/ thread1327072.html C++ Лабораторная, перевести с Паскаля https://www.cyberforum.ru/ cpp-beginners/ thread1327053.html
Перевести из Паскаля в Си.Если можно пожалуйста то в среде Dev-С++.Заранее спасибо) Program J8; uses crt; const n=3; m=6; var a:array of integer; b:array of integer; i,j,k:integer;
Как вывести содержимое файла на экран C++
Как вывести все с текстового файла на экран???Очень нуждаюсь в вашей помощи
C++ В данном тексте найти все слова, в которых гласные чередуются с согласными помогите пожалуйста с задачей, не понимаю как это сделать... в данном тексте найти все слова в которых гласные чередуются с согласными https://www.cyberforum.ru/ cpp-beginners/ thread1327044.html
C++ Сложение двух денежных сумм #include<iostream> using namespace std; int main() { setlocale (0, ""); int pe1, sh1, f1, pe2, sh2, f2; char ex; do { https://www.cyberforum.ru/ cpp-beginners/ thread1327036.html C++ Как записать длину строки типа string в переменную
Собственно вопрос в заголовке. Спасибо заранее:) Через i=s.size() // где, s -> string, i -> int; не работает
C++ Протабулировать заданную функцию на интервале с шагом h напишите программу для решения следующей задачи.Протабулировать функцию f(x) на интервалес шагом ℎ. Вывести значения x и y. https://www.cyberforum.ru/ cpp-beginners/ thread1327022.html C++ Определить, сколько процентов от всего количества элементов последовательности целых чисел составляют нечетные https://www.cyberforum.ru/ cpp-beginners/ thread1327015.html
Пользовательский класс Array должен содержать конструктор с параметрами для создания динамических целочисленных массивов и установки начальных значений их элементов (реальные размеры массива – число...
C++ Запись чисел из текстового файла
Доброго времени суток. Имеется текстовый файл, в котором дан номер элемента (химического), далее название самого элемента, а на следующей строке 9 чисел. То есть так: 1 H 0.384220004 ...
C++ Поменять местами максимальные элементы заданных матриц. Как упростить программу? https://www.cyberforum.ru/ cpp-beginners/ thread1326991.html
Дали задачу, я её решил, и по-моему получилось как-то нерационально. Подскажите, как можно упростить код? Заранее благодарен. Вот условие задачи: Даны две матрицы А и В. Написать программу,...
35 / 17 / 10
Регистрация: 13.12.2014
Сообщений: 107
14.12.2014, 04:23 0

Ассемблерная вставка. Найти минимальный и максимальный элементы в массиве и их сумму - C++ - Ответ 6983603

14.12.2014, 04:23. Показов 3643. Ответов 5
Метки (Все метки)

Лучший ответ Сообщение было отмечено Lynatik001 как решение

Решение

Вот твой код с комментариями:

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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int main()
{
    int max, max2, multiplication;
    int a[10] = { 6, 3, 4, -2, -14, -8, 7, 8, -2, 24 };
    _asm
    {
        ; max element one
//---эта часть - поиск максимума---
            lea esi, a //записываешь адрес массива в регистра ESI
            mov ebx, dword ptr[esi]  //читаешь значение по адресу указываемому регистром ESI, в регистр EBX
            mov ecx, 10 //записываешь значение 10 (количество элементов массива) в регистр ECX
        M1:
        lodsd  //читаем значение по указываемому регистром ESI, в регистр EAX, и увеличиваем ESI на 4
            cmp eax, ebx  //сравниваешь содержимое двух регистров
            jle M2  //условный переход: переходить если первый регистр (EAX) <= второму регистру (EBX)
            mov ebx, eax //сохраняешь большее значение из регистра EAX в регистре EBX
        M2 :
        loop M1 //цикл: уменьшение ECX на 1, переход на метку M1 если ECX не равен нулю
            mov max, ebx //сохраняем найденный максимум в переменной max
//---эта часть - поиск максимума---
 
//---эта часть - поиск второго максимума, неравного первому---
            lea esi, a  //записываешь адрес массива в регистра ESI
            mov ebx, dword ptr[esi]  //читаешь значение по адресу указываемому регистром ESI, в регистр EBX
            mov ecx, 10  //записываешь значение 10 (количество элементов массива) в регистр ECX
        M3:
        lodsd  //читаем значение по указываемому регистром ESI, в регистр EAX, и увеличиваем ESI на 4
            cmp eax, ebx  //сравниваешь содержимое двух регистров
            jle M4  //условный переход: переходить если первый регистр (EAX) <= второму регистру (EBX)
            cmp eax, max  //сравниваешь EAX с уже найденным максимумом
            je M4  //условный переход: переходить если равны
            mov ebx, eax  //сохраняешь большее значение из регистра EAX в регистре EBX
        M4 :
        loop M3
            mov max2, ebx  //сохраняем второй найденный максимум в переменной max2
//---эта часть - поиск второго максимума, неравного первому---
 
            imul ebx, max //умножение двух максимумов
            mov multiplication, ebx  //сохранение произведения в переменной multiplication
    }
    cout << "Max 1 : " << max << " Max 2 : " << max2 << endl;
    cout << multiplication;
}
Добавлено через 12 минут
Его нужно изменить следующим образом:

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
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int main()
{
    int max, min, summa; //ИЗМЕНЕНО: вместо max2, переменная min; вместо multiplication, переменная summa
    int a[10] = { 6, 3, 4, -2, -14, -8, 7, 8, -2, 24 };
    _asm
    {
        ; max element one
            cld  //ДОБАВЛЕНО: для установки направления поиска от меньшего адреса к большему
                  //в твоем примере из-за отсутствия этой строки могли быть ошибки при исполнении
 
//---эта часть - поиск максимума---
            lea esi, a //записываешь адрес массива в регистра ESI
            mov ebx, dword ptr[esi]  //читаешь значение по адресу указываемому регистром ESI, в регистр EBX
            mov ecx, 10 //записываешь значение 10 (количество элементов массива) в регистр ECX
        M1:
        lodsd  //читаем значение по указываемому регистром ESI, в регистр EAX, и увеличиваем ESI на 4
            cmp eax, ebx  //сравниваешь содержимое двух регистров
            jle M2  //условный переход: переходить если первый регистр (EAX) <= второму регистру (EBX)
            mov ebx, eax //сохраняешь большее значение из регистра EAX в регистре EBX
        M2 :
        loop M1 //цикл: уменьшение ECX на 1, переход на метку M1 если ECX не равен нулю
            mov max, ebx //сохраняем найденный максимум в переменной max
//---эта часть - поиск максимума---
 
//---эта часть - поиск минимума---
            lea esi, a  //записываешь адрес массива в регистра ESI
            mov ebx, dword ptr[esi]  //читаешь значение по адресу указываемому регистром ESI, в регистр EBX
            mov ecx, 10  //записываешь значение 10 (количество элементов массива) в регистр ECX
        M3:
        lodsd  //читаем значение по указываемому регистром ESI, в регистр EAX, и увеличиваем ESI на 4
            cmp eax, ebx  //сравниваешь содержимое двух регистров
            jge M4  //ИЗМЕНЕНО: условный переход: переходить если первый регистр (EAX) >= второму регистру (EBX)
//            cmp eax, max  //УДАЛИТЬ
//            je M4  //УДАЛИТЬ
            mov ebx, eax  //сохраняешь меньшее значение из регистра EAX в регистре EBX
        M4 :
        loop M3 //цикл: уменьшение ECX на 1, переход на метку M3 если ECX не равен нулю
            mov min, ebx  //ИЗМЕНИТЬ: сохраняем минимум в переменной min
//---эта часть - поиск минимума---
 
            add ebx, max //ИЗМЕНИТЬ: операция сложения в EBX сейчас минимум прибавляем max
            mov summa, ebx  //ИЗМЕНИТЬ: сохранение сумм в переменной summa
    }
    cout << "Max: " << max << " Min : " << min << endl;
    cout << "Summa: "<<summa;
}


Вернуться к обсуждению:
Ассемблерная вставка. Найти минимальный и максимальный элементы в массиве и их сумму C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2014, 04:23
Готовые ответы и решения:

В двухмерном массиве найти максимальный и минимальный элементы и их координаты в массиве
&quot;В двухмерном массиве, размещенном в куче и заполненном случайными вещественными значениями,...

Найти в массиве максимальный и минимальный элементы в массиве и их количество
Помогите, пожалуйста, начал осваивать c++...Не могу справиться с такой задачей: Написать...

Найти в массиве минимальный и максимальный элементы. Вывести последовательность значений из этого диапазона, не встречающихся в данном массиве
Найти в массиве минимальный и максимальный элементы. Вывести последовательность значений из этого...

Найти в массиве максимальный и минимальный элементы и поменять их местами
Помогите разобраться Дан массив целых чисел. Найти в нем максимальный и минимальный элементы и...

5
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2014, 04:23

Найти в массиве минимальный и максимальный элементы и поменять их местами
Помогите пожалуйста, пришёл с армии восстановился забыл многое Найти в массиве G минимальный и ...

Найти максимальный и минимальный элементы массива и их сумму.
Дан массив х(10).найти максимальный и минимальный элементы массива и их сумму.

Найти минимальный и максимальный элементы заданного массива; найти сумму всех элементов
Дано массив a, найти минимальный и максимальный элемент массива, суму всех элементов массива,...

Найти минимальный и максимальный элементы в массиве, поменять их местами (код не всегда работает)
Найти мини и максим элементы в массиве, поменять их местами меняет не всегда, работает в небольших...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.