Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
#1

Работа с динамической матрицей

24.05.2013, 20:12. Просмотров 404. Ответов 1
Метки нет (Все метки)

итак, есть динамичесакя матрица, в ней различные целые неотрицательные числа. Требуется найти столбец с наибольшим количеством чисел Армстронга.

Проблема состоит в том, что почему-то при обращении к элементу массива значение из ячейки не получается, по сему и работать корректно не может. Не подскажете, в ем проблема?



Assembler
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <fstream>
#include <ctime>
using namespace std;
#define MAX 100
unsigned is_arm (unsigned a) {
    unsigned res=0,tmp,tmp2,summ=0;
    _asm {
        pushad
        cmp a,10
        jb m4
        mov eax,1
        mov ebx,10
        mov ecx,0
m1:
        mul ebx
        inc ecx
        cmp eax,a
        jb m1
        mov tmp,ecx
        mov eax,a
m2:
        mov ebx,10
        xor edx,edx
        cdq
        div ebx
        mov tmp2,eax
        mov eax,edx
        mov ebx,edx
m3:
        mul ebx
        dec ecx
        cmp ecx,1
        ja m3
        add summ,eax
        mov eax,tmp2
        mov ecx,tmp
        cmp eax,0
        ja m2
        mov eax,summ
        cmp eax,a
        jne m5
m4:
        mov res,1
m5:
        popad
    }
    return res;
}
int main ()
{
    setlocale (LC_ALL,".1251");
    cout<<"Массив:"<<endl;
    ifstream in("input.txt");
    if (!in){
        cout<<"Входной файл не найден"<<endl;
        return 0;
    }
    char n;
    int t;
    in>>t;
    n=(char)t;
    unsigned **mas;
    mas=new unsigned *[(int)n];
    for (int i=0;i<(int)n;i++)
        mas[i]=new unsigned[(int)n];
    for (int i=0;i<n;i++)
        for (int j=0;j<n;j++)
            in>>mas[i][j];
    for (int i=0;i<n;i++){
        for (int j=0;j<n;j++)
            cout<<mas[i][j]<<" ";
        cout<<endl;
    }
    unsigned max(0),imax(0),summ,tmp,nn;
    _asm{
        mov al,n
        cbw
        cwd
        mov ecx,eax
        mov nn,eax
        mov ebx,mas
        mov edi,0
external:
        push ecx
        mov edx,[ebx][edi*4]
        mov ecx,nn
        mov esi,0
        mov summ,0
iternal:
        //mov eax,dword ptr [ebx][esi]
        mov eax,[ebx][esi]
        push ecx
        push eax
        call is_arm
        cmp eax,1
        jne m1
        inc summ
m1:
        pop eax
        pop ecx
        add esi,4
        dec ecx
        cmp ecx,0
        ja iternal
        mov edx,summ
        cmp edx,max
        jb m2
        mov max,edx
        pop ecx
        mov imax,ecx
        jmp m3
m2:
        pop ecx
m3:
        add edi,4
        loop external
    }
    cout<<"Максимальное количество чисел армстронга: "<<max<<" в столбце "<<n-imax+1<<endl;
    in.close();
    return 0;
}

даже если использовать комментарий и закомментировать следующую после нее, ничего не работает

а если прямо перед циклом написать эту строчку:
Assembler
1
mov tmp,[ebx][edi]
то компилятор вообще пишет "improper operand type"

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2013, 20:12
Ответы с готовыми решениями:

Работа с матрицей
Помогите с заданием : Для прямоугольной матрицы найти минимальный из...

Работа с матрицей!
Здравствуйте! Помогите мне решить следующую задачу, ибо я не имею ни малейшего...

Работа с матрицей: замена диагональных элементов
Файл содержит матрицу размером 4х4. Изменить в ней значения диагональных...

Программа со структурами (матрицей) и макроопределениями
Привет, друзья. Снова нужна помощь. Задание - Найти максимальный элемент...

Макрос для работы с матрицей, нужно объяснение
Подскажите, что происходит в этом макросе, как он работает, очень нужно!!!...

1
sh2ezo
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
24.05.2013, 21:48 #2
любое обращение к элементу транслируется в обращение к памяти, а инструкции mov m32,m32 в процах от интел и AMD пока нету
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2013, 21:48

Реализовать с квад матрицей волнообразное движение темной строки (черной)
Мальчики! помогите пожалуйста сделать лабу на asm, хотя бы наброски, чтоб могла...

Построение модуля динамической структуры. Прерывание Ctrl + C
помогите пожалуйста, не могу понять почему прерывание ctrl+c не работает,...

Работа с динамической матрицей
Всем доброго времени суток, проблема заключается в том, что я ввожу значения в...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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