mov-Anweisung in x86-Assembly
Frage
Nach dem, was ich über mov
gelesen habe, wird das zweite Argument in das erste Argument kopiert.Was macht das dann?
movl 8(%ebp), %edx
Es kopiert alles, was in edx steht, in den ersten Parameter der Funktion (da ein Offset von +8 vom ebp
ein Parameter ist)?
Ich habe das Gefühl, dass dies wirklich bedeutet, den ersten Parameter in das edx
-Register zu verschieben, aber ich habe auf Wikipedia gelesen, dass es umgekehrt ist?
Lösung
movl 8(%ebp), %edx
ist in "AT & T Syntax";Bei dieser Syntax steht die Quelle an erster Stelle und das Ziel an zweiter Stelle.Also ja, dein Glaube ist richtig.Die meisten Dokumentationen verwenden die "Intel-Syntax" in umgekehrter Reihenfolge.Dies ist eine Quelle erheblicher Verwirrung für Personen, die neu in der x86-Assembly sind.
In Intel Syntax würde Ihre Anweisung geschrieben werden:
mov edx, [ebp + 8]
Beachten Sie das Fehlen von %
vor den Registernamen und die Verwendung von eckigen Klammern anstelle von Klammern für die Adresse sowie das Fehlen eines l
-Suffixes in der Anweisung.Dies sind tote Werbegeschenke, um zu wissen, welche Form der Montage Sie betrachten.