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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2020, 18:06   #1
elizabethezova
Новичок
Джуниор
 
Регистрация: 19.05.2020
Сообщений: 2
По умолчанию Ассемблер и С++. Поменять местами первую строчку и столбец матрицы

Здравствуйте! Проблема такая: Задали задание, нужно написать программу, в которой главный модуль находится в языке С С++, а дополнительный модуль в языке Ассемблера. Программа обязательно должна состоять из 2 раздельный файлов, т.е Нельзя встроить код ассемблера в код С++. Из главного модуля передаю количество элементов матрицы, и указатель на первый елемент матрицы.

В ассемблере нужно: поменять местами элементы первого столбца и первой строчки в матрице, если сумма первого столбца = сумме первой строки.

Код написанный на С++:
Код:
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
 
extern "C" void asm_proc(int **a, int, int); // описание прототипа ASM-подпрограммы
using namespace std;
 
void Input(int** a, int n, int m);
void Output(int** a, int n, int m);
void Delete(int** a, int n, int m);
int main()
{
    srand(time(0)); // генерация случайных чисел
    int** a = new int* [3]; // 3 строки в массиве
    for (int count = 0; count < 3; count++)
        a[count]= new int[3]; // и 3 столбцов
    Input(a, 3,3);
    asm_proc(a, 3, 3);
    Output(a,3,3);
    Delete(a, 3, 3);
    getchar(); getchar();
    return 0;
}
void Input(int **a, int n, int m)//функция заполнения массива с входными параметрами: массив и ограничение
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            a[i][j] = (rand() % 10 + 1); // заполняем случайными числами
    }
}
void Output(int** a, int n, int m)//функция вывода массива в консоль
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << a[i][j] << "\t";//потоковый вывод
        cout << endl;//переход на следующую строку
    }
}
void Delete(int** a, int n, int m)
{
    for (int i = 0; i < n; i++)
        delete[]a[i];
}
Помогите, пожалуйста написать код на Ассемблере.
На С++ оброботка бы выглядела вот так, но как сделать на ассемблере все же не знаю:
Код:
int str = 0, stb = 0, d, i= 0, j =0;
va: 
        str += a[0][i];
        stb += a[i][0];
        i++;
        if (i != n)
            goto va;
 
    if (str == stb)
    {
vb:     
            d = a[0][j];
            a[0][j] = a[j][0];
            a[j][0] = d;
            j++;
            if (j != n)
                goto vb;
    }
elizabethezova вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана матрица m на m,поменять первую строку и последний столбец местами Never_Die Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 13.05.2013 13:42
Поменять местами K-ю строку и K-й столбец квадратной матрицы VoltZZZ Паскаль, Turbo Pascal, PascalABC.NET 2 14.03.2012 14:50
Дана вещественная матрица А(11,8). Если четный по номеру столбец матрицы упорядочен по убыванию, то поменять его местами пашок1994 Помощь студентам 0 23.11.2011 20:22
Поменять местами столбец и первую строку DanteDMC3 Помощь студентам 1 12.02.2010 16:06
Задача на СИ в заданной матрице поменять местами первую строку и первый столбец %( defol-777 Помощь студентам 2 14.01.2009 09:59