30 votes

instruction d'assemblage

J'ai l'instruction suivante et j'aimerais savoir quelle est la fonction du 0x10 en ce qui concerne cette instruction LEAL? Est-ce une multiplication ou un ajout ou autre chose?

 leal 0x10(%ebx), %eax
 

Quelqu'un peut-il clarifier? Il s'agit d'un assembleur x86 sur une boîte Linux.

64voto

Nils Pipenbrinck Points 41006

leal, ou lea nom complet est "la Charge effective d'adresse" et c'est exactement cela: Il en fait une adresse de calcul.

Dans votre exemple, l'adresse de calcul est très simple, parce que ça ajoute un offset à ebx et stocke le résultat dans eax:

eax = ebx + 0x10

lea peut faire beaucoup plus. Il peut ajouter de registres, de multiplier les registres avec les constantes de 2, 4 et 8 pour l'adresse calculs des mots, des nombres entiers et en double. Il peut également ajouter un offset.

Notez que lea est particulière en ce sens qu'il ne sera jamais modifier les indicateurs, même si vous l'utilisez comme une simple addition, comme dans l'exemple ci-dessus. Les compilateurs parfois exploiter cette fonctionnalité, et de remplacer une outre par une amo pour aider le planificateur. Il n'est pas rare de voir lea instructions de faire de l'arithmétique simple dans le code compilé pour cette raison.

4voto

Pascal Cuoq Points 39606

lea est synonyme de "charge effective adresse"; c'est une façon d'utiliser le sophistiqués tels modes de la IA32 jeu d'instructions pour faire de l'arithmétique. L' l suffixe est un moyen de distinguer la taille des opérandes de l'instruction dans la syntaxe de GNU, comme, ce que vous avez sur votre Linux.

Donc, en bref, oui, c'est une sorte de plus d'instruction. Il peut également gérer les multiplications par 2, 4 ou 8 en même temps.

Voir aussi cette question connexe (où ils sont à l'aide de la syntaxe Intel pour discuter de la même instruction):

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