NASM x86 16-битные режимы адресации
У меня проблемы с указанием адреса и записью в моем случае переменной байтового размера. Это дает мне ошибку "ошибка: неверный эффективный адрес":
mov byte[AX], byte 0x0
После некоторого следа и ошибки я протестировал то же самое, но с EAX. Это компилируется просто отлично:
mov byte[EAX], byte 0x0
Что мне здесь не хватает?
1 ответ
Решение
[AX]
недопустимая спецификация операнда памяти.
Действительными 16-битными являются:
[constant]
[BX]
[SI]
[DI]
[BX+constant]
[BP+constant]
[SI+constant]
[DI+constant]
[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[BX+SI+constant]
[BX+DI+constant]
[BP+SI+constant]
[BP+DI+constant]
[BP] формально недействителен, но многие ассемблеры спокойно преобразуют его в [BP+0].
Информацию о кодировках операндов памяти и байтах ModR/M и SIB см. В руководстве по ЦПУ.