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;
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
AXMD: Topic aus Sonstiges (Delphi) verschoben am So 24.05.2009 um 09:04
dummzeuch - Sa 23.05.09 21:31
MagicRain hat folgendes geschrieben : |
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
BenBE hat folgendes geschrieben : |
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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!