Einzelnen Beitrag anzeigen

Quake

Registriert seit: 25. Aug 2003
222 Beiträge
 
Delphi 7 Enterprise
 
#42

Re: Verdrehte Bits (Wilde Pointereien)

  Alt 4. Sep 2007, 13:31
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.
  Mit Zitat antworten Zitat