Comme indiqué, je découvre...
dap++ a écrit :
LEA sert à faire un calcul de la même façon qu'on calcule une adresse mais elle stocke simplement l'adresse calculée dans le premier opérande sans y accéder. Ça permet de faire plusieurs calculs en une fois.
|
J'avais juste vu que "lea esi,10" correspondait à "mov eax,10"+"mov esi,eax" parce qu'on ne pouvait pas mettre une valeur numérique directement dans esi, par exemple. Je ne savais pas qu'on pouvait l'utiliser pour des calculs (enfin j'avais cru remarquer, d'où ma question...). Je crois que je commence à comprendre, d'autant que je viens de tomber là-dessus.
dap++ a écrit :
Comme tu le vois dans le code désassemblé si il n'y a pas de deuxième terme l'assembleur ajoute +0 parce qu'il n'y a pas moyen d'encoder autrement, du coup lea eax, [eax*2] est plus long que lea eax, [eax+eax] par exemple.
|
Je ne suis pas sûr de bien comprendre la nécessité du +0...
J'ai fait une petite recherche sur l'instruction lea, je comprends mieux. Mais il y a encore un truc qui m'échappe : comment sont effectuées ces opérations, puisqu'elles ne font l'objet d'aucune instruction spécifique ? Je veux dire : comment sont interprétés les signes '+' et '*' ?