L'erreur NASM donne (malgré mon système d'exploitation) est "Adresse effective invalide". P>
Maintenant, j'ai vu de nombreux exemples de comment utiliser Lea et je pense que je l'ai bien compris, mais mon Nasme n'aime pas ça. J'ai essayé Maintenant si j'ai étendu mes registres à 32 bits (c.-à-d. est là que quelqu'un est si bien informé qui pourrait m'expliquer pourquoi mon assembleur ne me laisse pas utiliser lea comme je suis supposé que cela devrait être utilisé? P> Lea CX, [CX + 9] code> et cela a fonctionné;
Lea CX, [BX + CX] CODE> N'A PAS. P>
Lea ECX, [ECX * 8 + ECX] CODE>) Tout serait bien mais je suis limité pour utiliser des registres 16 et 8 bits seulement. p>
3 Réponses :
Ceci est parce que Si votre code fonctionnera en mode 386 ou ultérieure en mode 16BIT, vous pouvez utiliser Voir aussi Ce Q & A sur X86 Adressage des modes (surtout en discutant des modes d'adressage 32/64 bits et le x86 tag wiki. p> [bx + cx] code> n'est pas valide dans un mode d'adressage sur 16 bits x86, voir cette site pour plus d'informations. P>
Lea CX, [bx + di] code> ou
Lea CX, [BX + Si] code> devrait fonctionner. P>
Lea Lea CX, [ECX + 9] CODE> (préfixe de taille d'adresse mais encore 16 bits d'opérande). P >
LEA CX, [CX * 8 + CX] CODE> Ne fonctionne pas car "Balance-Index-Base" est uniquement disponible avec des registres 32 bits. Ce n'est pas une limitation de l'assembleur - c'est une limitation du processeur. p>
Ces tableaux suivants pour construire un postbyte indifférent que le registre peut être utilisé comme un enregistrement d'adresse et lequel d'entre eux peut être combiné avec un second registre d'adresses (Baseregister + IndexGister et peut-être la mise à l'échelle) pour construire une adresse avec elle.
(Observé à partir du mode d'adresse 16 bits, où le drapeau D n'est pas défini.) Dirk P> P>
Je pense que vous vous trompez lorsque vous dites que lea CX, [CX + 9] a travaillé.