2012-05-01 11 views
7

Ich versuche, was Anweisung der Versammlung, um herauszufinden, ich weiß, dass es mit SSE2 ein Gleitkommaaddition auf eine x86-64-Maschine ist. Außerdem weiß ich, dass% xmm0 ein Register ist. Was ich jedoch nicht weiß, ist was -8 (% rbp) bedeutet. Die Handbücher sind ein wenig verwirrend.Was bewirkt die folgende Assembly-Anweisung addsd -8 (% rbp),% xmm0? tatsächlich tut</p> <pre><code>addsd -8(%rbp), %xmm0 </code></pre> <p>

Grundsätzlich ist die Frage, bedeutet -8 (% rbp), dass es einen Wert aus einem Register nimmt (vielleicht die letzten 8 Bytes von rbp) oder nimmt es einen Wert aus dem Speicher (Fließkommawert bei einem Offset von -8 von der in rbp enthaltenen Adresse).

+2

Ihre zweite Vermutung ist richtig. Es greift auf den Wert bei '-8' Byte Offset von Adresse 'rbp' zu. – Mysticial

+0

Hey Mysticial, können Sie auf eine Referenz verweisen, die das leicht erklärt? – owagh

+0

Verwirrende AT & T-Syntax schlägt wieder. – harold

Antwort

7

Ihre zweite Vermutung ist richtig. Es wird auf den Wert -8 Bytes Offset von Adresse rbp zugegriffen.

Angenommen AT & T Syntax diese Anweisung lädt einen 8-Byte von Adresse doublerbp - 8 und fügt sie zu dem Wert in der unteren Hälfte der xmm0.

+0

Können Sie auf eine Referenz verweisen, die das leicht erklärt? Die meisten Tutorials und Referenzen in der Assemblersprache sind hoffnungslos verschleiert (oder so, wie ich mich fühle. Vielleicht bin ich es nur) – owagh

+0

Ich versuche gerade jetzt einen zu finden. Aber die relative Adressierung könnte etwas grundlegend sein. – Mysticial

+3

Hier ist es: http://en.wikibooks.org/wiki/X86_Assembly/GAS_Syntax – Mysticial