Question

Vous devrez m'excuser, je suis novice dans l'assemblage x86 et l'assemblage en général.

Donc ma question est la suivante: j'ai quelque chose comme:

addl %edx,(%eax)

% eax est un registre qui contient un pointeur sur un entier. Appelons cela xp

Est-ce que cela signifie que cela signifie: * xp = * xp +% edx ? (% edx est un entier)

Je ne comprends pas très bien où addl stockera le résultat. Si % eax est un pointeur sur un int, alors (% eax) doit être la valeur réelle de cet int. Ainsi, addl stockera-t-il le résultat de % edx + (% eax) dans * xp ? J'aimerais vraiment que quelqu'un m'explique cela!

J'apprécie vraiment toute aide!

Était-ce utile?

La solution

Oui, cette instruction fait exactement ce que vous pensez faire.

La plupart des instructions arithmétiques x86 utilisent deux opérandes: une source et une destination. Dans la syntaxe AT & T (utilisée ici), la destination est toujours le bon opérande. Donc, avec une instruction comme:

addl %edx, %eax

les valeurs dans edx et eax sont additionnées et le résultat est stocké dans eax . Cependant, dans votre exemple, (% eax) est un opérande de la mémoire; c'est ce que signifient les parenthèses dans la syntaxe AT & T (comme les crochets dans la syntaxe NASM).

Cela signifie que eax est traité comme un pointeur. Ainsi, l'opérande de droite est extrait de l'adresse indiquée par eax et le résultat est stocké à la même adresse. .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top