Ïðîãðàììèðîâàíèå íà Àññåìáëåðå


Èñïîëüçîâàíèå ìåòîäà ñâÿçíûõ èíäåêñîâ äëÿ ìíîãîìåðíûõ ìàññèâîâ


Ïðèìåð. Ñîñòàâèòü ïðîãðàììó äëÿ ðåàëèçàöèè ôðàãìåíòà ïðîãðàììû:

int a[3][5][4];

for (k=1, l=0; k<4; k+=2, l++){

r=0;

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

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

                                    r+=a[i][j][k];

            s[l]=r;

}

...

dataseg

a          dd        1,1,1,1

            dd        2,2,2,2



            dd        3,3,3,3

            dd        4,4,4,4

            dd        5,5,5,5

            dd        1,1,1,1

            dd        2,2,2,2

            dd        3,3,3,3

            dd        4,4,4,4

            dd        5,5,5,5

            dd        1,1,1,1

            dd        2,2,2,2

            dd        3,3,3,3

            dd        4,4,4,4

            dd        5,5,5,5

s           dd        2 dup(?)

hk        dd        4

hj         dd        16

hi         dd        16*5

codeseg

begin:

;for (k=1, l=0; k<4; k+=2, l++){

mov     ecx, 4

shr       ecx, 1

mov     ebx,offset a

add      ebx, 4

mov     esi, offset s

fork:

;r=0;

sub       edi, edi

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

push     ebx

push     ecx

mov     ecx, 3

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

fori:

push     ebx

push     ecx

mov     ecx, 3

forj:

;r+=a[i][j][k];

add      edi, [ebx]

;j++

add      ebx, [hj]

loop     forj

;i++

pop      ecx

pop      ebx

add      ebx, [hi]

loop     fori

;s[l]=r;

mov     [esi], edi

;l++

add      esi, 4

pop      ecx

pop      ebx

add      ebx, 8

loop     fork

;}



Ñîäåðæàíèå ðàçäåëà