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 см. В руководстве по ЦПУ.

Другие вопросы по тегам