Ошибка, которую дает NASM (несмотря на мою рабочую ОС) является "недопустимым исполнительным адресом".
Теперь я видел много примеров того, как использовать ЛЕЮ, и я думаю, что разобрался в нем, но моему NASM не нравится он. Я попробовал lea cx, [cx+9]
и это работало; lea cx, [bx+cx]
не сделал.
Теперь, если я расширил свои регистры до 32 битов (т.е. lea ecx, [ecx*8+ecx]
) все было бы хорошо, но я ограничиваюсь для использования 16-и 8-разрядные регистры только.
Действительно ли здесь кто-либо так хорошо осведомлен, кто мог объяснить меня, ПОЧЕМУ мой ассемблер не позволяет мне использовать lea путем, я предположил, что он должен использоваться?
Это потому, что [bx + cx]
недействителен ни в каком режиме адресации на 16-битном x86, см. ] сайт для получения дополнительной информации.
lea cx, [bx + di]
или lea cx, [bx + si]
должны работать.
Если ваш код будет работать на 386 или новее в 16-битном режиме, вы можете использовать lea cx, [ecx + 9]
(префикс размера адреса, но все же 16-битный размер операнда).
См. Также эти вопросы и ответы о режимах адресации x86 (в основном обсуждаются 32/64-битные режимы адресации и тег wiki x86 .
lea cx, [cx * 8 + cx]
не работает, потому что адресация «масштаб-индекс-база» доступна только с 32-битными регистрами. Это не ограничение ассемблера - это ограничение процессора.