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

Матрицу преобразовать по схеме в строку

06.06.2019, 21:16. Показов 694. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно написать ассемблерную вставку преобразования матрицы в строку,есть код на шарпе,но как переделать на ассемблер не знаю.Не понимаю как обращаться по индексам

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
 static int[] Preobrazovanie(int[,] a,int n)
        {
            
            var result = new List<int>();
 
            for (int s = 0; s <= n + n - 2; s++)
            {
                if (s % 2 == 1)
                    for (int i = 0; i <= s; i++)
                    {
                        int j = s - i;
                        if (i < n && j < n)
                            result.Add(a[i, j]);
                    }
                else
                    for (int i = s; i >= 0; i--)
                    {
                        int j = s - i;
                        if (i < n && j < n)
                            result.Add(a[i, j]);
                    }
            }
 
            return result.ToArray();
        }
Изображения
 
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2019, 21:16
Ответы с готовыми решениями:

Матрицу преобразовать по схеме в строку
Матрицу преобразовать по схеме в строку

Матрицу 9х8 преобразовать в матрицу 8х7, вычеркнув строку и столбец
Матрицу 9х8 преобразовать в матрицу 8х7 , вычеркнув строку и столбец, на пересечении которых...

Преобразовать заданную прямоугольную матрицу Х (р,к) в матрицу строку У (п, расположив последовательно все столбцы матрицы Х
Преобразовать заданную прямоугольную матрицу Х (р,к) в матрицу строку У (п, расположив...

Преобразовать матрицу в текстовую строку
Ввести символьную матрицу. Инвертировать её относительно середины строки. Преобразовать матрицу в...

2
1 / 1 / 0
Регистрация: 10.12.2018
Сообщений: 112
06.06.2019, 22:55  [ТС] 2
Нужно написать ассемблерную вставку,есть на шарпе, но как переделать не знаю
Не понимаю как обращаться к элементам по индексу


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
   static int[] Preobrazovanie(int[,] a,int n)
        {
            
            var result = new List<int>();
 
            for (int s = 0; s <= n + n - 2; s++)
            {
                if (s % 2 == 1)
                    for (int i = 0; i <= s; i++)
                    {
                        int j = s - i;
                        if (i < n && j < n)
                            result.Add(a[i, j]);
                    }
                else
                    for (int i = s; i >= 0; i--)
                    {
                        int j = s - i;
                        if (i < n && j < n)
                            result.Add(a[i, j]);
                    }
            }
 
            return result.ToArray();
        }
0
Модератор
Эксперт по электронике
8516 / 4370 / 1648
Регистрация: 01.02.2015
Сообщений: 13,577
Записей в блоге: 9
07.06.2019, 12:01 3
Так на masm. Под свой C/C++ переделаете самостоятельно
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
.686
.model flat, stdcall
option casemap :none
 
        include \masm32\include\windows.inc
 
        include \masm32\include\user32.inc
        include \masm32\include\kernel32.inc
        include \masm32\include\masm32.inc
 
        includelib \masm32\lib\user32.lib
        includelib \masm32\lib\kernel32.lib
        includelib \masm32\lib\masm32.lib
.data
        aszMsgInstant   db      0Dh, 0Ah, 'Matrix:', 0Dh, 0Ah, 0
        aszMsgResult    db      'Array:', 0Dh, 0Ah, 0
        aszInteger      db      '%8d', 0
        aszPressEnter   db      0Dh, 0Ah, 0Dh, 0Ah, "Press ENTER to exit", 0
        aszCrLf         db      0Dh, 0Ah, 0
        N               dd      5
        Matrix          dd      11, 12, 13, 14, 15
                        dd      21, 22, 23, 24, 25
                        dd      31, 32, 33, 34, 35
                        dd      41, 42, 43, 44, 45
                        dd      51, 52, 53, 54, 55
 
 
.data?
        hConsoleOutput  HANDLE  ?
        hConsoleInput   HANDLE  ?
        Array           dd      1024 dup(?)
        Result          dd      ?
        Buffer          db      1024 dup(?)
        BufLen          dd      ?
 
.code
 
ShowMatrix      proc    lpMatrix:DWORD, uiRows:DWORD, uiCols:DWORD
        pushad
        cmp     [uiRows],       0
        je      @@Exit
        cmp     [uiCols],       0
        je      @@Exit
 
        mov     ecx,    [uiRows]
        mov     esi,    [lpMatrix]
        @@ForI:
                push    ecx
                mov     ecx,    [uiCols]
                @@ForJ:
                        push    ecx
                        lodsd
                        invoke  wsprintf, ADDR Buffer, ADDR aszInteger, eax
                        invoke  StrLen, ADDR Buffer
                        mov     [BufLen],       eax
                        invoke  WriteConsole, hConsoleOutput, ADDR Buffer,\
                                BufLen, ADDR BufLen, NULL
                        pop     ecx
                loop    @@ForJ
                invoke  WriteConsole, hConsoleOutput, ADDR aszCrLf,\
                        LENGTHOF aszCrLf - 1, ADDR BufLen, NULL
                pop     ecx
        loop    @@ForI
@@Exit:
        popad
        ret
ShowMatrix      endp
 
ShowArray       proc    lpArray:DWORD, uiAmount:DWORD
        pushad
 
        mov     ecx,    [uiAmount]
        mov     esi,    [lpArray]
        @@ForI:
                push    ecx
                lodsd
                invoke  wsprintf, ADDR Buffer, ADDR aszInteger, eax
                mov     [BufLen],       eax
                invoke  WriteConsole, hConsoleOutput, ADDR Buffer,\
                        BufLen, ADDR BufLen, NULL
                pop     ecx
        loop    @@ForI
 
        popad
        ret
ShowArray       endp
 
main    proc
 
        ; получение описателей ввода и вывода консоли
        invoke  GetStdHandle,   STD_INPUT_HANDLE
        mov     hConsoleInput,  eax
 
        invoke  GetStdHandle,   STD_OUTPUT_HANDLE
        mov     hConsoleOutput, eax
 
        invoke  ClearScreen
 
        ;вывод исходных данных
        invoke  WriteConsole, hConsoleOutput, ADDR aszMsgInstant,\
                LENGTHOF aszMsgInstant - 1, ADDR BufLen, NULL
        invoke  ShowMatrix,      ADDR Matrix, [N], [N]
 
        ;обработка: преобразование в массив
        lea     ebx,    [Matrix]
        lea     edi,    [Array]
        mov     ecx,    0                               ;    for (int s = 0; s <= n + n - 2; s++)
        _forS:                                          ;    {
                test    ecx,    1                       ;        if (s % 2 == 1)
                jz      _else
                        mov     esi,    0               ;            for (int i = 0; i <= s; i++)
                        _forI:                          ;            {
                                mov     eax,    ecx     ;                int j = s - i;
                                sub     eax,    esi
                                cmp     esi,    [N]     ;                if (i < n && j < n)
                                jae     _nextI
                                cmp     eax,    [N]
                                jae     _nextI
                                push    eax             ;                    result.Add(a[i, j]);
                                mov     eax,    [N]
                                mul     esi
                                pop     edx
                                add     eax,    edx
                                shl     eax,    2
                                mov     eax,    [ebx+eax]
                                stosd
                        _nextI:
                                inc     esi
                                cmp     esi,    ecx
                        jbe     _forI
                        jmp     _nextS                  ;            }
                _else:                                  ;        else
                        mov     esi,    ecx             ;            for (int i = s; i >= 0; i--)
                        _forII:                         ;            {
                                mov     eax,    ecx     ;                int j = s - i;
                                sub     eax,    esi
                                cmp     esi,    [N]     ;                if (i < n && j < n)
                                jae     _nextII
                                cmp     eax,    [N]
                                jae     _nextII
                                push    eax             ;                    result.Add(a[i, j]);
                                mov     eax,    [N]
                                mul     esi
                                pop     edx
                                add     eax,    edx
                                shl     eax,    2
                                mov     eax,    [ebx+eax]
                                stosd
                        _nextII:
                                dec     esi
                        jns     _forII                  ;            }
        _nextS:
                inc     ecx
                mov     eax,    [N]
                add     eax,    eax
                sub     eax,    2
                cmp     ecx,    eax
        jbe     _forS                                   ;    }
 
        ;вывод результата
        invoke  WriteConsole, hConsoleOutput, ADDR aszMsgResult,\
                LENGTHOF aszMsgResult - 1, ADDR BufLen, NULL
        mov     eax,    [N]
        mul     eax
        mov     ebx,    eax
        invoke  ShowArray,      ADDR Array, ebx
 
        ;ожидание нажатия ENTER
        invoke  WriteConsole, hConsoleOutput, ADDR aszPressEnter,\
                LENGTHOF aszPressEnter - 1, ADDR BufLen, NULL
        invoke  ReadConsole, hConsoleInput, ADDR Buffer,\
                LENGTHOF Buffer, ADDR BufLen, NULL
 
        invoke  ExitProcess, 0
main    endp
 
end     main
0
07.06.2019, 12:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.06.2019, 12:01
Помогаю со студенческими работами здесь

Преобразовать заданную прямоугольную матрицу, упорядочив каждую строку по неубыванию элементов
Дана матрица размера mxn. Преобразовать ее,упорядочив каждую строку по неубыванию элементов....

Преобразовать матрицу следующим образом: вычесть последнюю строку из всех строк
Дана действительная прямоугольная матрица размера NxM. Преобразовать матрицу следующим образом:...

Преобразовать матрицу: поэлементно вычесть последнюю строку из всех строк, кроме, последней
Уважаемые форумчане, я понимаю, что это наглость, но ..... в университете дали задание &quot;Дана...

Преобразовать матрицу: поэлементно вычитать последнюю строку из всех строк, кроме последней
Дана действительная квадратная матрица размера n*n. Требуется преобразовать матрицу:поэлементарно...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru