Frage zum pre-(post)increment decrement

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Frage zum pre-(post)increment decrement
Ich verstehe hier nicht so ganz was der Sinn des ganzen ist…
Also wenn ich das richtig verstanden habe setze ich z.B.mein Register nach dem ich eine Variable in das Register geschrieben habe von einem long runter zu einem byte …aber was soll das?dadurch geht mir doch was verloren oder täusche ich mich… :anx:

in dem mir vorliegen Beispiel:
struct rec{long int x;short int y;char c};
struct rec a; /hat die Adresse 1232
struct rec b; /
hat die Adresse 344

a=b;

movl $1232,%eax
movl $344,%ebx
movl (%ebx)+,(%eax)+
movw(%ebx)+,(%eax)+
movb(%ebx)+,(%eax)+


Hallo,

du willst die gesamte Struktur kopieren.
Als erstes kopierst du den long. Dabei setzt du das Register eax auf die Adresse von a, und ebx auf die von b.

Nun, beim Kopieren des Wertes mittels indirekter Adressierung, erhöhst du dabei mittels Postincrement beide Registerwerte.

Somit zeigen sie nun auf a + sizeof(long), resp. b + sizeof(long).
Dort stehen die jew. short y.

Dieser wird analog kopiert. movw = move word

Am ende wird noch der char mit movb = move byte kopiert. Das letzte Postincrement koennte man sich theoretisch sparen.
Es macht nur sinn, wenn man weitere Werte, die hinter c stehen, kopieren will.

cu
Ford Prefect


klingt einleuchtend danke :smiley:

allerdings hätte ich jetzt noch ne Frage zum lea befehl.

Der lea Befehl wird soweit ich weiß benutzt wenn man wenn es für einen Befehl keine Adressierungsart gibt.
Mir ist allerdings noch nicht so ganz klar wie dieser lea Befehl funktioniert also aufgebaut ist…

Nun habe ich folgende Aufgabe vor mir liegen:

lea 34,%eax
lea 12(%eax),%ebx
lea (%eax,%ebx,4)%ecx
lea 4(%eax,%ebx,2),%ecx

Frage lautet : warum wird der lea Befehl verwendet,anstatt diese Funktion direkt mit Arithmetikbefehlen zu berechnen? :anx: keine Ahnung :rolleyes:


Wahrscheinlich ist lea schneller.
Ansonsten bräuchtest du mehrere add und mul Befehle.