Программирование на Ассемблере

Использование 2-х мерного массива при немонотонном изменении индекса


Пусть задана разреженная матрица, содержащая очень много нулей.

Для упрощения задания определяются только ненулевые элементы матрицы в виде:

x, y, value,

где x, y - координаты ненулевого значения. Составить программу для заполнения матрицы заданными значениями.

Для решения этой задачи потребуется задать адрес элемента массива matr[x][y], который вычисляется по формуле:

& matr[x][y] = & matr[0][0] + x * Hx + y * Hy

; Задание матриц

PackMatr                    dd        1, 3, 10

                                    dd        2, 7, 20

                                    dd        4, 4, 30

count                           dd        3

UnpackMatr                dd        5 dup (5 dup 0)

hi                                 dd        5*4

; Заполнение матрицы UnpackMatr:

mov     ecx, [count]

mov     ebx, offset PackMatr

for1:

mov     eax, [ebx]        ;x

mul      [hi]                  ; x * hi

mov     edx, [ebx+4]   ;y

mov     esi, [ebx+8]    ;value

mov     [UnpackMatr+eax+edx*4], esi

add      ebx, 12

loop     for1



Содержание раздела