lea EBX,[EDI+10] ; в регистр EBX загружается адрес l0-го байта относительно точки, на которую указывает адрес в регистре EDI.
Пример.Написать процедуру, выполняющую суммирование массива из 10 чисел размером слово.
Вариант 1 (используется адрес):
Вариант 2 (используется смещение):
mov AX,0
mov AX,0
lea EBX,MAS
mov EBX,0
mov ECX,10
mov ECX,10
cycl: add AX,[EBX]
cycl: add AX,MAS[EBX*2]
add EBX,2
add EBX,1
loop cycl
loop cycl
Второй вариант позволяет получать более наглядный код и потому является предпочтительным.
В том случае, если элементы просматриваются не подряд, адрес элемента может рассчитываться по его номеру (числа нумерованы с единицы):
Aисп = Aначала+(<Номер>-1)*<длина элемента>.
Полученный по формуле адрес записывается в 32-х разрядный регистр и используется для доступа к элементу.
Пример.Написать фрагмент, который извлекает из массива, включающего 10 чисел размером слово, число с номером n (n£10).
mov EBX,N; номер числа
dec EBX; вычитаем 1
mov AX,MAS[EBX*2]; результат в AX
Моделирование матриц.Значения матрицы могут располагаться в памяти по строкам и по столбцам. Для определенности будем считать, что матрица расположена в памяти построчно, как в Паскале и С++.
При обработке элементов матрицы следует различать просмотр по строкам, просмотр по столбцам, просмотр по диагоналям и произвольный доступ.
Если матрица расположена в памяти по строкам и просмотр выполняется по строкам, то обработка может выполняться так, как в одномерном массиве, без учета перехода от одной строки к другой.
Пример.Написать фрагмент определения максимального элемента матрицы A(3,5).