Èñïîëüçîâàíèå ìåòîäà ñâÿçíûõ èíäåêñîâ äëÿ ìíîãîìåðíûõ ìàññèâîâ
Ïðèìåð. Ñîñòàâèòü ïðîãðàììó äëÿ ðåàëèçàöèè ôðàãìåíòà ïðîãðàììû:
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
;}