rstJkee
@rstJkee

NASM смещение в массиве (invalid effective address)?

Как в nasm можно выполнить смещение?
То есть можно сделать что-то вроде [string+2], но мне нужно сделать это через переменную, которая инкрементится (в моём случае cx, то есть [string + cx]). При попытке выполнить такое действие "mov [str2 + cx], ax" выбивает invalid effective address
  • Вопрос задан
  • 553 просмотра
Решения вопроса 1
rstJkee
@rstJkee Автор вопроса
Как оказалось тут не effective address invalid, а я инвалид. Надо юзать регистр ebx (которые base), а не cx (которые counter). То есть что-то в духе каст_к_типу[variable+ebx*размер]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как в nasm можно выполнить смещение?
[string + cx]
invalid effective address

дело не в ассемблере, а в устройстве процессора. x86 имеет в 16-битном режиме режим адресации "база + смещение", но базой могут выступать только регистры bx, si, di и bp. При этом di адресуется относительно сегментного регистра es, а bp адресуется относительно сегментного регистра ss.
Это задокументировано в табличке 2-1 "16-Bit Addressing Forms with the ModR/M Byte" в томе 2А Intel Developer Manual'а, доступного, например, здесь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы