Différence entre lea et offset
ar db "Defference $"
Quelle est la différence entre
mov dx,offset ar
et
lea dx,ar
Je pense que les deux font le même travail, mais quelle est la différence entre ces deux
la seule différence entre eux est que
Double Possible de Quelle est la différence entre MOV et LEA?
lea
est une instruction et offset
n'est pasDouble Possible de Quelle est la différence entre MOV et LEA?
OriginalL'auteur userBI | 2010-05-09
Vous devez vous connecter pour publier un commentaire.
Dans ce cas d'utilisation LEA et MOV faire la même chose. LEA est plus puissant que MOV si vous souhaitez calculer une adresse de façon plus complexe.
Permet de dire, par exemple: vous souhaitez obtenir l'adresse de la n-ième caractère de votre tableau, et le n est stocké dans bx. Avec MOV, vous devez écrire la suite de deux instructions:
Avec lea vous pouvez le faire avec une seule instruction:
Une autre chose à considérer ici: le
add dx,bx
instruction va changer les indicateurs d'état de la CPU. L'ajout fait à l'intérieur de lalea dx, [ar + bx]
instruction sur l'autre main pour ne pas changer les drapeaux de toute façon, parce qu'il n'est pas considéré comme une instruction arithmétique.C'est parfois utile si vous souhaitez conserver les drapeaux tout en faisant quelques calculs simples (adresse calculs sont très courants). Le stockage et la restauration du pavillon-inscrivez-vous, c'est faisable, mais une opération lente.
offset ar
- est immédiat de la valeur qui est calculée lors de la traduction. Etlea
- est de processeur instruction "de la Charge Effective de l'Adresse" de la deuxième opérande références memmory.est juste un shift-and-add instruction. Il n'a jamais fait charge de la mémoire, il utilise l'adressage en mode de syntaxe et de codage binaire. Dans le cas des OP cas, avec
lea
sur une adresse absolue, ladisp16
est le même que leimm16
pour lamov
, à la fois calculé de la même manière à assembler temps (en fait, au moment de la liaison quand la dernière adresse est connue).Je n'ai pas dit que
lea
charges de quoi que ce soit (la référence est juste une référence). J'ai dit que c'est une véritable instruction x86. Si vous ne calculatons qui peut être fait au cours de la conversion vous pouvez utilisermov
.La chose qui intrigue m'a le plus
lea
est la syntaxe utilisée par les compilateurs et les débogueurs.lea ax, [addr]
pour moi, c'est quelque chose comme "faire quelque chose avec le contenu deaddr
et mettre le résultat dansax
, ce qui n'est pas le cas.Aussi, cela a été un problème dans les anciens jours de réel 16 bits mode de programmation. Lors de la liaison à un petit binaire .com fichier où tout était dans le même segment, vous pouvez utiliser
offset
oulea
de façon interchangeable, la plupart du temps, mais le travail avec des modèles de mémoire autre quetiny
causerait beaucoup de problèmes depuisoffset
est par rapport à la base du segment de l'adresse où les données sont définies.OriginalL'auteur Nils Pipenbrinck
Citation de Langage d'Assemblage pour les Processeurs x86, 7e, KIP R. IRVINE
OriginalL'auteur Eli Zehavi