Software > Coding
Erste Assembler-Gehversuche
Mado:
Kann mir jemand im Detail erklären, was die Assembler-Direktive lea macht? Ich habe hier ein Stückchen Beispiel-Code:
--- Code: ---#ifdef __mcoldfire__
lea -12(sp),sp
movem.l d1/a0-a1,(sp)
#else
movem.l d1/a0-a1,-(sp)
#endif
--- Ende Code ---
Im Falle von Nicht-Coldfire werden die angegebenen Register auf den Stack gesichert, der Stackpointer wird jeweils vorher dekrementiert.
Ich verstehe das lea Kommando oben nicht, der Rest ist klar. Warum ist das nicht einfach ein sub #12,sp? lea lädt doch eine Adresse, aber warum sind im linken Teil dann Klammern um sp, das würde doch bedeuten, dass der Inhalt der Speicherzelle referenziert wird, auf die sp zeigt?
Und, was ist der Unterschied zwischen dem Laden einer Adresse und einer effektiven Adresse? Bei allen Büchern, die ich gelesen habe, habe ich es nicht verstanden.
mfro:
ein
--- Code: ---suba.w #12,sp
--- Ende Code ---
gibt's beim ColdFire nicht (mehr).
--- Code: ---suba.l #12,sp
--- Ende Code ---
gibt's noch, der Befehl braucht aber (weil #-12 da ein Langwort ist) 3 Worte.
--- Code: ---lea -12(sp),sp
--- Ende Code ---
macht effektiv dasselbe mit zwei Words.
Thorsten Otto:
lea kann man im Grunde mit dem Adress-operator (&) in C vergleichen. Es wird lediglich die berechnete Adresse ins Adress-Register geladen, aber nicht dereferenziert.
lea ist auf eigentlich auf allen Prozessoren schneller als ein suba (u.a. glaube ich weil dafür eine andere ALU benutzt wird als für Arithmetik-Operationen).
Mado:
--- Zitat von: Thorsten Otto am Di 28.06.2022, 06:16:56 ---lea kann man im Grunde mit dem Adress-operator (&) in C vergleichen. Es wird lediglich die berechnete Adresse ins Adress-Register geladen, aber nicht dereferenziert.
--- Ende Zitat ---
Ah, danke, das war die entscheidende Erklärung, jetzt habe ich es verstanden. Es wird also in der Adressierungsart auf einen Inhalt verwiesen und die effektive Adresse ist dann die "Hausnummer".
Mado:
--- Zitat von: mfro am Mo 27.06.2022, 19:12:48 ---
--- Code: ---lea -12(sp),sp
--- Ende Code ---
macht effektiv dasselbe mit zwei Words.
--- Ende Zitat ---
Das ist dann der nächste Schritt: Zu wissen, welcher Code schnell läuft und welcher langsam. Danke.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln