Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 20.12.2021
Сообщений: 100
1
C/C++

[MMX] Дан квадратный двумерный массив. Найти сумму элементов каждой его строки.

25.03.2024, 22:56. Показов 722. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, есть задача. Дан квадратный двумерный массив. Найти сумму элементов каждой его строки и упорядочить строки в соответствии со значениями этих сумм. Используя ММХ-расширение процессоров I80x86 реализовать заданный алгоритм.
Написал код, не могу запустить его так как выходит ошибка "синтаксическая ошибка на языке ассемблера обнаружено newline" Нашлась ошибка в 23 строке, как фиксить ? раньше с подобным не сталкивался.
Сам код (частично на с++)
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <ctime>
#include "conio.h"
using namespace std;
 
int main() {
    const int SIZE = 4;
    // Вычислить суммы элементов каждой строки массива и сохранить их в отдельном массиве.
    int array[SIZE][SIZE] = { {1, 2, 3, 4}, {13, 14, 15, 16}, {9, 10, 11, 12}, {5, 6, 7, 8} };
    int sumArray[SIZE] = { 0 };
 
    for (int i = 0; i < SIZE; ++i) {
        for (int j = 0; j < SIZE; ++j) {
            sumArray[i] += array[i][j];
        }
    }
 
    for (int i = 0; i < SIZE; ++i) {
        cout << "Sum of elements in row " << i << ": " << sumArray[i] << endl;
    }
 
    // Упорядочить строки в соответствии со значениями этих сумм с помощью MMX-расширения процессоров x86.
    _asm
    {
        dec SIZE
        mov ecx, SIZE
        mov esi, OFFSET array
        mov edi, OFFSET sumArray
        mov edx, OFFSET array + 16
 
        outer:
        movq xmm0, QWORD PTR[edi]
            movq xmm1, QWORD PTR[edi + 8]
            movq xmm2, QWORD PTR[edi + 16]
            movq xmm3, QWORD PTR[edi + 24]
 
            movq xmm4, xmm0
            pcmpeqw xmm4, xmm1
            movd ebx, xmm4
 
            movq xmm5, xmm2
            pcmpeqw xmm5, xmm3
            movd esi, xmm5
 
            mov eax, [ebx]
            cmp eax, [esi]
            cmovl eax, [esi]
 
            cmp eax, 0
            je continue
            movq xmm6, QWORD PTR[esi]
            movq xmm7, QWORD PTR[edi]
 
            movq QWORD PTR[edi], xmm6
            movq QWORD PTR[esi], xmm7
 
            continue:
            add edi, 16 * SIZE
            add esi, 16 * SIZE
            dec ecx
            jnz outer
    }
 
    // Вывод нового отсортированного двумерного массива на экран
    cout << "\nNew array\n";
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
        {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2024, 22:56
Ответы с готовыми решениями:

Дан целочисленный квадратный массив 10×10. Найти сумму элементов каждой строки
Дан целочисленный квадратный массив 10×10. Найти сумму элементов каждой строки. Заранее спасибо))

Дан целочисленный квадратный массив 10×10. Найти сумму элементов каждой строки.
7. Дан целочисленный квадратный массив 10×10. Найти сумму элементов каждой строки. нужна помощь...

Дан целочисленный квадратный массив 10 х 10. Найти сумму минимальных элементов из каждой строки
2. Дан целочисленный квадратный массив 10 х 10. Найти сумму минимальных элементов из каждой строки....

Дан двумерный массив чисел NxN. Найти сумму элементов каждой его диагонали, параллельной побочной
Дан двумерный массив чисел NxN. Найти сумму элементов каждой его диагонали, параллельной побочной....

Дан двумерный массив чисел NxN. Найти сумму элементов каждой его диагонали, параллельной побочной
Дан двумерный массив чисел NxN. Найти сумму элементов каждой его диагонали, параллельной побочной.

5
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8564 / 4412 / 1655
Регистрация: 01.02.2015
Сообщений: 13,710
Записей в блоге: 9
25.03.2024, 23:12 2
Может быть нужно два подчёркивания __asm...
0
1 / 1 / 0
Регистрация: 20.12.2021
Сообщений: 100
25.03.2024, 23:26  [ТС] 3
Я опечатался в шапке, ошибка не в 23 строке, а в 26 где move ecx, SIZE. Что тут не так ? Пишет что ошибка синтаксическая, обнаружено newline.

Добавлено через 4 минуты
Я сейчас пишу новый код для этой задачи, полностью с нуля. Надеюсь он будет работать. Тогда скину его сюда, как закрытие темы.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8564 / 4412 / 1655
Регистрация: 01.02.2015
Сообщений: 13,710
Записей в блоге: 9
25.03.2024, 23:28 4
Не разбираюсь в синтаксисе C/C++...
Вот эта лексема
C++
7
    const int SIZE = 4;
описывает константу или переменную?
В строке dec SIZE не соблюдается неизменность этого элемента
0
1 / 1 / 0
Регистрация: 20.12.2021
Сообщений: 100
26.03.2024, 01:12  [ТС] 5
Короче, в том коде много ошибок на самом деле, поэтому я написал новый, я не очень силен в ассемблере. Моя проблема что у меня нет идей, как реализовать упорядочивание строк по возрастанию сумм элементов, попытался в первом коде, но у меня там конфликт между ассемблерной и с++ составляющей. Вот в новом коде работает поиск суммы элементов, я его реализовал через цикл и вывел ассемблер прокомментировал , но сюда я пока ничего не вставил про упорядочивание. Можете помочь ? Своих идей нет.
Сам код.
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
#include <ctime>
#include "conio.h"
 
using namespace std;
 
int main()
{
signed char matr[8][8];
srand(time(NULL));
for (int i = 0; i < 8; i++) //Генерация значений для элементов массива
{
for (int j = 0; j < 8; j++)
{
matr[i][j] = rand() % 10;
}
}
 
printf(" Array:\n"); //Вывод массива на экран
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
printf("%4d ", matr[i][j]);
}
printf("\n");
}
 
int t;
for (int i = 0; i < 8; ++i) //Транспонирование матрицы
{
for (int j = i; j < 8; ++j)
{
t = matr[i][j];
matr[i][j] = matr[j][i];
matr[j][i] = t;
}
}
 
signed char compare[8];
_asm {
mov ecx, 8//Устанавливаем значение счетчика
mov esi, 0//Обнуляем esi
mov edi, 0//Обнуляем edi
inc edi//Увеличиваем edi на единицу
movq mm0, matr[esi * 8]//Загружаем первый элемент каждой строки в mm0
cycle :
movq mm1, matr[edi * 8]//Загружаем по столбцам следующие элементы каждой строки в mm1
paddb mm0, mm1//Складываем элементы строк
inc edi //Увеличиваем edi на единицу
cmp edi, ecx //Сравним edi со счетчиком
jl cycle //Переход по метке с условием "Меньше"
movq[compare], mm0 //Сохраняем суммы элементов строк
emms
}
 
printf("\n Sums of each row elements:\n");
for (int i = 0; i < 8; i++)
{
printf("%4d ", compare[i]);
}
 
 
return 0;
}
Вот щас сижу и думаю как мне строки сравнить и поменять местами между собой, как-будто PCMPGTW использовать надо. Ну и так как работа у меня по mmx, то заполнение матрицы я сделал через rand

Добавлено через 1 час 29 минут
вроде что-то получается еще работаю.
0
Asm/C++/Delphi/Py/PHP/VBA
 Аватар для Jin X
6750 / 1997 / 231
Регистрация: 14.12.2014
Сообщений: 4,203
Записей в блоге: 12
26.03.2024, 13:22 6
_asm вполне допустим в Visual C++ (если не указан ключ /Za), хотя это устаревшая форма записи, рекомендуется писать __asm.
MMX-регистр имеет размер 64 бита, а int – 32 бита, поэтому нужно загружать туда значения через movd mm1,[...] (предварительно очистив весь регистр pxor mm1,mm1, чтобы старшая половина была обнулена). Используйте один регистр для суммы (сумма может превосходить 32 бита), другой — для загрузки значения. И затем складывайте их paddq mm0,mm1. Каждую сумму можно записывать в переменную unsigned long long, для этого можно завести отдельный массив сумм. Заведите ещё один массив (например, idx), в который запишите изначально индексы: 0, 1, 2, ..., 7. И дальше при сортировке меняйте местами не только значения сумм, но и соответствующие индексы (можно суммы и индексы объединить в одну структуру и сделать массив структур). Тогда в конце останется сделать копию исходного массива, записывая в него строки с индексом idx[i] из исходного).
1
26.03.2024, 13:22
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2024, 13:22
Помогаю со студенческими работами здесь

Дан двумерный массив. Определить сумму элементов каждой строки.
Дан двумерный массив. Определить сумму элементов каждой строки.

Дан двумерный массив N*N. Определите сумму элементов каждой строки
Дан двумерный массив N*N. Определите сумму элементов каждой строки.

Дан двумерный массив. Дополнить его n+1 строкой и m+1 столбцом,в котором находятся сумма элементов каждой строки и столбца
здравствуйте. помогите решить задачу. Дан двумерный массив вещественных чисел размерностью N*M....

дан двумерный массив 10х10 найти макс сумму нечетных элементов строки вывести сумму и номер строки
дан двумерный массив 10х10 найти макс сумму нечетных элементов строки вывести сумму и номер строки

Дан двумерный массив. Найти номера первых отрицательных элементов каждой строки
Дан двумерный массив. Найти номера первых отрицательных элементов каждой строки. Помогите решить.

Дан двумерный массив размером m на n. Найти сумму его положительных элементов
Собственно: дан двумерный массив размером m на n.Найти сумму его полож. элем.Из первых четырех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
Объекты и их имена
hw_wired 28.01.2025
Введение: Основы объектного подхода и их роль в информатике В современном мире информационных технологий объектный подход стал фундаментальным принципом организации и обработки информации. Этот. . .
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru