5 votes

Modes d'adressage NASM x86 16 bits

J'ai des difficultés à pointer vers une adresse et à écrire dans mon cas une variable de la taille d'un octet. Cela me donne l'erreur "error : invalid effective address" :

mov byte[AX], byte 0x0

Après quelques essais et erreurs, j'ai testé la même chose mais avec EAX. Cela compile très bien :

mov byte[EAX], byte 0x0

Qu'est-ce que je rate ici ?

14voto

Alexey Frunze Points 37651

[AX] est une spécification d'opérande mémoire invalide.

Les 16 bits valides sont :

[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] est formellement invalide, mais de nombreux assembleurs le convertiront tranquillement en [BP+0].

Voir le manuel de l'UC pour les codages des opérandes de mémoire et les octets ModR/M et SIB.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X