MONTAGE: Könnte mir jemand erklären, was diese Zeile mit dem leaq Anweisung tut?

Ich bin durch einige Assembler-code, und ich kann nicht herausfinden, was eine code-Zeile macht. Der code ist:

 leaq   0(,%rax,4), %rdx

Ich weiß lea ist im Grunde eine Art von mov Anleitung, aber es bewegt immer nur die Adresse. So bewegen wir die Adresse etwas zu %rdx (machen %rdx "Punkt", um etwas auf dem stack). Ich weiß, was %rax Punkte auf den Stapel (sagen -28(%rbp)), aber ich bin verwirrt, wie das multiplizieren mit 4, um meine Antwort. Würde %rdx Punkt zu 4*(-28) = -112(%rbp)?

Dank!

BEARBEITEN:
Für den Zusammenhang, den folgenden code vor dieser Anweisung:

pushq   %rbp 
movq    %rsp, %rbp 
movl    %esi, -28(%rbp)
movl    -28(%rbp), %eax 
cltq 
leaq    0(,%rax,4), %rdx
  • irgendwann lea ist auch für Berechnungen verwendet. schwer zu sagen, in Ihrem Fall, da Sie nicht genügend code, um zu sehen.
  • Auch die 0 auf der Außenseite scheint überflüssig, da es nur noch hinzufügen, nichts zu der Adresse. Es sei denn, Sie benötigen es, um indirekt Zugriff auf den Speicher.
  • Ich habe eine Zusammenfassung von dem code, der vor dem Unterricht. Hoffe, das ist genug @emschorsch ich bin einverstanden; ich denke, die 0 ist sinnlos zu; es muss der vom compiler erzeugt wird
  • Wie Sie sehen können, was in %esi wird auf den stack kopiert und dann kopiert, um %eax. Neben %eax ist erweitert um 64bit rax von der Maschine Befehl cltq. Am Ende der leaq Befehl multiplizieren %rax durch 4 und speichern Sie es in %rdx. Um sicher zu sein für das, was die Hölle ist es getan, wir müssen sehen, was passieren wird %rdx später.
  • Mögliche Duplikate von Was ist der Zweck der LEA-Anweisung?
InformationsquelleAutor pauliwago | 2012-11-13
Schreibe einen Kommentar