Ich glaube, wir reden aneinander vorbei.
Zitat:
- Das der Parameter "Source" vor dem Call in das EAX-Register geladen wird.
Das ist das doch was ich die ganze Zeit sage.
Ich sehe immer noch nicht die unnötige Ladeoperation. In deinem Code taucht das "MOV EAX,***" auf und in meinem Code statt dessen "MOV EDX,***". Wo ist da der Unterschied, ausser das ein anderes Register geladen wird. Die CPU führt beide Befehle gleich schnell aus. Ich sehe aber immer noch ein unnötiges "CALL".
Delphi-Quellcode:
mov eax,$00800081
call SwapBytes
Eines muss ich dazu noch sagen: Das "Swapen" tauch nur einmal in meinem gesamten Programm auf.
Deswegen : Warum das in eine Funktion packen, wenn ich es auch mitten in den Code packen kann.
Noch einmal die Gegenüberstellung
Delphi-Quellcode:
Meins Deins
Zahl := $12345678; Zahl := $12345678;
asm Zahl := SwapBytes(Zahl);
mov edx, Zahl;
// mov eax, Zahl // bei dir von Delphi generiert
// call SwapBytes
asm // Dieser Block ist in deiner Funktion
bswap edx; bswap eax;
// Rücksprung aus Funktion
ret;
// ich hoffe das heisst so auf einem 8086
end;
mov Zahl, edx;
// mov Zahl, eax; // bei dir von Delphi generiert
end;
// jetzt ist bei beiden Varianten die Variable Zahl gedreht
Ich sehe es nicht wo dein Code kürzer oder schneller sein sollte.
Zitat:
Ich empfehle, das ganze mal in Delphi einzugeben, zu kompilieren und dann mal den Assemblercode anzuschauen.
Kann Delphi den
Asm-Code selbst ausgeben? Ich habe keinen Disassembler installiert.