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


Использование метода приведенных индексов для многомерных массивов


Пусть определение массива имеет вид:

Тип Имя [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

Последний метод используют для доступа к элементам массива компиляторы с языков высокого уровня, поэтому использование переменных с индексами, особенно для многомерных массивов, требует большого времени для вычисления адреса элемента массива.



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