instruction MOV dans l'assemblage x86
Question
D'après ce que j'ai lu mov
, il copie le deuxième argument dans le premier argument. Alors, qu'est-ce que cela fait?
movl 8(%ebp), %edx
Il copie tout ce qui est dans EDX au premier paramètre de la fonction (depuis un décalage de +8 de ebp
est un paramètre)?
J'ai l'impression que ce que cela signifie vraiment, c'est déplacer le premier paramètre dans le edx
Inscrivez-vous, mais j'ai lu sur Wikipedia que c'est l'inverse?
La solution
movl 8(%ebp), %edx
est dans "AT&T Syntax"; Dans cette syntaxe, la source vient en premier et la destination deuxième. Alors oui, votre croyance est correcte. La plupart des documents utilisent la "syntaxe Intel", qui a la commande inverse. Ceci est une source de confusion considérable pour les personnes nouvelles à l'assemblage x86.
Dans la syntaxe Intel, votre instruction serait écrite:
mov edx, [ebp + 8]
Notez l'absence de %
avant les noms de registre et l'utilisation de crochets au lieu de parenthèses pour l'adresse et l'absence d'un l
suffixe sur l'instruction. Ce sont des cadeaux morts pour savoir quelle forme d'assemblage vous regardez.