Привет всем! ...Для адресации элементов в двух.массивах данных, когда нужно получить доступ к словам, двойным словам, или учетверенным. ... a1 DD 45, -87, 23, - 11, 83, -442, 56 , -340 a2 DD 92, -31, 9 , -598 , 361 , 406, -172, 7 a3 DD 234, 8 , -177, 921, 380, -12 , 0, -51 iarray label dword DD a1 DD a2 DD a3 ... mov EBX, iarray+8 mov ESI, 4 mov EAX, [EBX][ESI*2][8] -------------------------- Здесь определенны 3 массива состоящие из чисел (а1..а3) предположим что требуеться помистить в регистр EAX число 380. Для этого воспользуемься схемой. поместим адресс масива, в котором находиться искомое число в регистр ESI который будет выступать в качестве индексново. ======= вообщем вопрос почему mov EBX, iarray+8 а не +6 не +2 как он вообще узнал что это адресс? аж отпало желании дальше читать(((
В ebx находится адрес начала массива a3. esi == 4. Результирующий (эффективный) адрес: 'ebx + 4 * 2 + 8' == 'ebx + 16'. Т.к. смещение в инструкции указывается в байтах, а размер элемента массива равен четырем, то для получения элемента массива нужно смещение разделить на четыре. Получается четвертый элемент массива. Считая от нуля, получаем 380. А вообще, пример, судя по всему, сугубо учебный, т.к. намного проще сделать так: mov esi, 0x4 mov eax, [ebx + esi * 4] P.S. Вопрос сформулирован так, что аж отпадает желаение отвечать.
Тьфу, не дописал же. 'mov EBX, iarray+8' строится по тому же принципу, что описан выше. iarray -- массив двойных слов (dword). Размер dword'а четрые байта. Следовательно, чтобы адресоваться к третьему элементу массива, надо к iarray прибавить '(3 - 1) * 4' (т.к. адресация ведется от нуля). Получается восемь.
оки спс, просто в книге которую я читаю автор предпологает что читатель наверно сам должен дадуматься что надо к iarray прибавить '(3 - 1) * 4 , 1 ые главе про адресацию нормально , а про эту адресацию думай сам...