Zitat von
negaH:
Delphi-Quellcode:
asm
MOV EAX,[EDX]
MOV EAX,[EDX].Member
end;
Alles klar. Dies geht auch beim VC-MASM. Ist nix besonderes, da hier eben nur das Offset dazugerechnet wird. Stattdessen könntest du ja auch nehmen
Delphi-Quellcode:
asm
MOV EAX,[EDX]
MOV EAX,[EDX+<offset Member>]
end;
... aber das andere ist lesbarer. Ist also nix besonderes und dient auch nicht der Argumentation, weil es aus anderen Gründen so existiert.
Zitat von
negaH:
Der Zugriff auf ein Member eines Records der den Zeiger benötigt erfolgt ohne syntaktisch explizite Dereferenzierung !
Die eckigen Klammern sind bereits eine Dereferenzierung. Diese spezielle Syntax kann man wie oben gezeigt, auch anders schreiben. Dann wird klarer was gemeint ist. Eine Dereferenzierung enthält der Ausdruck dennoch
Wäre es nicht so, müßte folgender Code durchgehen (was er nicht tut):
Zitat von
negaH:
Ja, exakt das ist eine Konsequenz aus der expliziten Derefernzierung, scheußlich das ist (Zitat: Joda).
@tommie-lie: Du weißt, ich gebe dir ungern recht ... hast es dir aber verdient. Die eckigen Klammern sind eben explizite Dereferenzierungen.
BTW: Man kann in Assembler in einem einzelnen Ausdruck nicht mehrere Dereferenzierungen vornehmen ... in Delphi geht dies.
Nachtrag: tommie-lie machte mich gerade darauf aufmerksam, daß vor Member noch ein Typ gehört