Мониторинг обменных курсов валют
18c0693f

Метод связанных индексов


Адрес элемента в начале строки используется для формирования адреса очередного элемента для обоих индексов, т.е. фактически требуется 2 экземпляра этого адреса. Т.к. фактически используется одно и тоже значение для работы с каждым индексом метод называется методом связанных индексов. Для получения 2-х экземпляров используется стек. Формируется необходимое значение, один экземпляр которого записывается в стек, второй остается в регистре для работы со вторым индексом. При необходимости работы с первым индексом извлекается значение из стека.

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

for (i=0; i<.. i++){                             mov     ecx, ...

mov     ebx, Смещение ПОЭ[11]

            ...

for (j=0; j<... ; j++){              fori:

                        ...                                 push     ecx

                                                            push     ebx

                                                            mov     ecx,...

                                                            forj:

                                                            [Имя массива + ebx]

}                                               add      ebx, [Hj]

                                                            loop     forj

}                                                           pop      ebx

                                                            add      ebx, Hi

                                                            pop      ecx

                                                            loop     fori

Пример 1. Составить программу для нахождения сумм строк матрицы с нечетными номерами

for (k=i=0; i<M; i+=2, k++){

   r=0;

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

      r+=matr[i][j]

   s[k]=r;

}

mov     esi, [N]

shl        esi, 3; Шаг по i

;for (k=0. i=1; i<M; i+=2, k++){

sub       eax, eax; k

mov     ecx, [M]

shr       ecx, 1

mov     ebx, [N]

shl        ebx, 2; i

fori:

;r=0;


subаааааа edx, edx
;аа for (j=0; j<N; j++)
pushаааа ecx
movаааа ecx, [N]
pushаааа ebx
forj:
;ааааа r+=matr[i][j]
addааааа edx, [matr+ebx]
;j++
addааааа ebx, 4
loopаааа forj
;аа s[k]=r;
movаааа [s+eax*4], edx
;i++
incаааааа eax
popааааа ebx
addааааа ebx, esi
popааааа ecx
loop fori
¦ЁшьхЁ 2. TюёЄртшЄ№ яЁюуЁрььє фы  яхЁхьэюцхэш  ьрЄЁшЎ
ideal
p586
model flat
extrn ExitProcess:proc
dataseg
matrаааааа ddааааа 1,1,1,1,1
аааааааааа ddааааа 2,2,2,2,2
аааааааааа ddааааа 3,3,3,3,3
аааааааааа ddааааа 4,4,4,4,4
Mааааааааа ddааааа 4
Nааааааааа ddааааа 5
Sааааааааа ddааааа 5 dup (?)
codeseg
begin:
movааа esi, [N]
shlааа esi, 3; ? г по i
;for (k=0. i=1; i<M; i+=2, k++){
subа eax, eax; k
movа ecx, [M]
shrа ecx, 1
movа ebx, [N]
shlа ebx, 2; i
fori:
;r=0;
subаа edx, edx
;аа for (j=0; j<N; j++)
pushааа ecx
movаааа ecx, [N]
pushааа ebx
forj:
;ааааа r+=matr[i][j]
addааа edx, [matr+ebx]
;j++
addа ebx, 4
loopааааа forj
;аа s[k]=r;
movаааааааа [S+eax*4], edx
;i++
incа eax
popа ebx
addа ebx, esi
popа ecx
loop fori
callааа ExitProcess
endаааа begin
¦ръ тшфэю шч яЁюуЁрььv фы  ърцфюую шч ьрёёштют ЄЁхсєхЄё  Єюы№ъю юфшэ ЁхушёЄЁ.




Самый выгодный курс обмена валюты