Entwickler-Ecke

Algorithmen, Optimierung und Assembler - [DEL] BSWAP problem


MagicRain - Sa 23.05.09 15:26
Titel: [DEL] BSWAP problem
Moin ich habe hier eine Routine wo ich BSWAP brauche ich habe es mit Iinline-Assambler versucht nur leider funktioniert der BSWAP nicht :(


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  EEAX,EEBX,BUFF: DWORD;

      //BSWAP EBX
      asm
        BSWAP EBX
        MOV BUFF,EBX
      end;
      EEBX := BUFF;


Vielleicht weiß ja einer von euch was los ist und hilft mir mal :P Irgendwie bekomme ich bei dem BSWAP ein falsches Resultat heraus :(

MfG


Moderiert von user profile iconAXMD: Topic aus Sonstiges (Delphi) verschoben am So 24.05.2009 um 09:04


dummzeuch - Sa 23.05.09 21:31

user profile iconMagicRain hat folgendes geschrieben Zum zitierten Posting springen:
Moin ich habe hier eine Routine wo ich BSWAP brauche ich habe es mit Iinline-Assambler versucht nur leider funktioniert der BSWAP nicht :(


Ich bin ja nicht so der Assembler-Spezi, aber macht nicht die Delphi-Funktion Swap genau dasselbe?

twm


BenBE - Sa 23.05.09 23:54

Um es kurz zu machen: Nein, Swap von Delphi und der ASM-Befehl BSWAP machen nicht das Selbe.

Zum Problem:

definiere bitte einmal, aus welcher Variable Du den Wert zu welcher Variable kopiert brauchst?

Ich nehm exemplarisch einmal an, aus Variable A der Wert soll ge-BSWAPed in B landen, dann wäre dies:


Delphi-Quelltext
1:
2:
3:
4:
5:
asm
    MOV EAX, DWORD PTR [A]
    BSWAP EAX
    MOV DWORD PTR [B], EAX
end;


Chemiker - So 24.05.09 00:38

Hallo MagicRain,

der Inhalt von EBX muss unter Delphi erhalten bleiben. Wenn EBX eingesetzt werden soll, so sollte der Inhalt vorher auf dem Stack gesichert werden und beim Beenden der ASM – Routine wieder hergestellt werden.
So wie Du die ASM – Routine geschrieben hast, kann jeder zufällige Wert dort drin stehen.

Bis bald Chemiker


MagicRain - So 24.05.09 05:01

Super danke euch :)

MfG


dummzeuch - So 24.05.09 10:40

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Um es kurz zu machen: Nein, Swap von Delphi und der ASM-Befehl BSWAP machen nicht das Selbe.


Ja, hast' recht. War wohl zu muede um die Beschreibung zu verstehen. Fuer alle anderen:

* BSWAP (Assembler) konvertiert ein 32 Bit Register von little endian in big endian und umgekehrt: $12345678 -> $78563412
* SWAP (Delphi) vertauscht die beiden Bytes eines 16 Bit Words: $1234 -> $3412

twm