Базово-индексная адресация с масштабированием

Содержимое индексного регистра умножается на масштабный коэффициент, и результат суммируется с содержимым базового регистра.

Например:

SUB ECX,[EBX+EAX*8]

10. Базово-индексная адресация со смещением.

Содержимое базового регистра складывается с содержимым индексного регистра и со смещением.

Например:

SUB EDX, ЕСХ[ЕАХ+10]

ADD EAX, [ESI][EBP+00ABCFh]

Аналог предыдущей команды:

ADD EAX, [ESI+EBP+00ABCFh]

11. Базово-индексная адресация со смещением и масштабированием.

Содержимое индексного регистра умножается на масштабный коэффициент, и результат добавляется к содержимому базового регистра, которое суммируется со смещением.

Например:

SUB ECX, table[EBX+36+EAX*8]

Аналог предыдущей команды:

SUB ECX, table[EAX*8][EBX+36]

Работа с массивами на ассемблере.

Массив — структурированный тип данных, состоящий из некоторого числа элементов одного типа.

Все элементы массива располагаются в памяти компьютера последовательно.

Интерпритация структуры данных в массиве зависит только от алгоритма обработки этих данных в конкретной программе, а не от особенностей раположения в памяти.

Нумерация элементов массива в ассемблере начинается с нуля.

Для получения адреса элемента в массиве необходимо начальный (базовый) адрес массива сложить с произведением индекса (номер элемента минус единица) этого элемента на размер элемента массива:

база + (индекс*размер элемента)

В качестве базового регистра может использоваться любой из восьми регистров общего назначения. В качестве индексного регистра также можно использовать любой регистр общего назначения, за исключением ESP/SP.

Иногда удобно использовать ECX в качестве номера элемента массива в цикле, организованном с помощью команды loop.

Пример: //сумма всех элементов массива

int mas1[2][4];

asm {

mov ecx,8;

xor eax,eax;

lea ebx,mas1[0];

m1: add eax, [ebx][ecx*4-4];

loop m1;

}

//2 вариант кода

asm {

mov ecx,8;

xor eax,eax;

m1: add eax, dword ptr mas1[ecx*4-4];

loop m1;

}

Понятие модульного программирования. Понятие подпрограммы. Ассемблерные процедуры и функции.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: