Использование метода приведенных индексов для многомерных массивов
Пусть определение массива имеет вид:
Тип Имя [p1..q1, p2..q2, ...pn..qn], где pi..qi- минимальное и максимальное значения i-ого индекса
Адрес элемента массива с индексами i1, i2, ...in определяется формулой[12]:
& Имя[i1, i2, ...in] = Адресу начала массива +
- , где Hi - шаг изменения адреса для i-ого индекса.Формулы для вычисления адреса:
Hn = sizeof (Тип);
Hn-1 = Hn * (qn
- pn +1);
...
H1 = H2 * (q2
- p2 + 1).
Формулы вычисления адреса показывают, что наиболее простой вид формула имеет при начальном значении индексов, равном 0.
Пример1. Реализовать фрагмент программы:
int x[3][4][5][6];
...
x[i][j][k][l]=i+j+k+l;
x dd (3*4*5*6) dup (?)
i dd 1
j dd 2
k dd 3
l dd 4
hl equ 4
hk equ 6*hl
hj equ 5*hk
hi equ 4*hj
...
mov eax, [i]
imul eax, hi
mov ebx, [j]
imul ebx, hj
add eax, ebx
mov ebx, [k]
imul ebx, [hk]
add eax, ebx
mov ebx, [l]
mov ecx, [i]
add ecx, [j]
add ecx, [k]
add ecx, [l]
mov [x+eax+ebx*4], ecx
…
Последний метод используют для доступа к элементам массива компиляторы с языков высокого уровня, поэтому использование переменных с индексами, особенно для многомерных массивов, требует большого времени для вычисления адреса элемента массива.