Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Массив в ассемблере

arr dw 100 dup (0) ; массив слов ind dw 0 ; текущий индекс массива
mov bx, ind mov arr[bx*2], ax ; записать значение ax в массиве inc ind Результат: **Error** test.asm(238) Illegal indexing mode Как правильно?


Ответ

Организация и функционирование вычислительных машин
Косвенная адресация с масштабированием Этот метод адресации полностью идентичен предыдущему, за исключением того, что с его помощью можно прочитать элемент массива слов, двойных слов или учетверенных слов, просто поместив номер элемента в регистр:
mov ax,[esi*2]+2 Множитель, который может быть равен 1, 2, 4 или 8, соответствует размеру элемента массива - байту, слову, двойному слову, учетверенному слову соответственно. Из регистров в этом варианте адресации можно использовать только ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ЕВР, ESP, но не SI, DI, ВР или SP, которые можно было использовать в предыдущих вариантах.
То есть, как правильно заметил skegg, тут подойдет mov arr[ebx*2], ax

Комментариев нет:

Отправить комментарий