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

       

Монотонное изменение индекса


Структура программы с монотонным изменением индексов:

Вычисление Hj , Hi

Цикл для вычисления.

Пример. Составить программу для вычисления сумм столбцов матрицы:

for (j=0; j<N; j++){

            s[j]=0;

            for (i=0; i<M; i++)

                        s[j]+=matr[i][j]

}

Для оптимизации программы запишем:

for (j=0; j<N; j++){

            r=0;

            for (i=0; i<M; i++)



                        r+=matr[i][j]

            s[j]=r;

}

; Вычисление Hi =4*N, Hj=4

mov     eax, [N]

shl        eax, 2; Hi

mov     ebx, 4; Hj

;for (j=0; j<N; j++){

mov     ecx, [N]

shl        ecx, 16

mov     edx, 0; j

forj:

;           r=0;

mov     esi, 0

;           for (i=0; i<M; i++)

mov     cx, [M]

mov     edi, 0; i

;                       r+=matr[i][j]

fori:

add      esi, [matr + edi + edx*4]

; i++

add      edi, eax

dec       cx

jnz        fori

;           s[j]=r;

mov     [s+edx*4], esi

;j++

inc       edx

sub       ecx, 10000h

jnz        forj

}

...

Недостатки метода:

·        для каждого индекса свой регистр;

·        не может быть обобщен на массивы большей размерности.



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