Доступ к массиву в MASM - PullRequest
1 голос
/ 29 мая 2010

У меня есть адрес моего массива (переданный как указатель на функцию) в регистр ESI. Как я могу получить доступ к определенной ячейке массива? то есть:

my_array[a + b * c]

, где c постоянно.

Ответы [ 2 ]

3 голосов
/ 29 мая 2010

Посмотрите инструкции, такие как LEA

Думайте об этом так:

LEA edx,[esi+ebx*4]
1 голос
/ 31 мая 2010

Вы также можете напрямую переместить его следующим образом:

MOV EDX, [ESI + 4*EBX]

Для статического массива вы можете фактически использовать два регистра одновременно для индексирования, но используя базовый адрес массива в качестве 32-битного смещения в режиме адресации . Это работает только для кода, не зависящего от позиции.

MOV EDX, my_array[ECX + 4*EBX]

Вместо использования двух разных регистров вы можете использовать один и тот же регистр дважды, чтобы имитировать масштабный коэффициент 3 (ebx + ebx*2), 5 или 9.

...