![]() |
AW: Fehler beim Byte-Swap mit Assembler in Delphi
Das sollte unter 64 Bit ganz genauso funktionieren.
|
AW: Fehler beim Byte-Swap mit Assembler in Delphi
Danke Michael,
aber kannst du mir noch kurz sagen warum das so ist? Weil nach meiner "Vorstellung" sollte es doch so sein:
Code:
Oder ist EAX immer 4 Bytes, auch bei einem 64bit System? (Sorry für die eventuell blöde Frage, aber ich habe mich bisher um sowas noch nicht kümmern müssen)
//32bit
00 00 00 01 => BSWAP EAX 01 00 00 00 //64bit 00 00 00 00 00 00 00 01 => BSWAP EAX 01 00 00 00 00 00 00 00 |
AW: Fehler beim Byte-Swap mit Assembler in Delphi
AL und AH = 8 Bit Register
AX = 16 Bit Register EAX = 32 Bit Register RAX = 64 Bit Register Und nun die Frage: Funktioniert EAX auch mit einem 64 Bit-Wert? :roll: (mit 32 Bit-Wert auf 64 Bit-CPU wird es bestimmt funktionieren) |
AW: Fehler beim Byte-Swap mit Assembler in Delphi
Wobei (um himitsus Beitrag noch zu ergänzen)
alle Register (also A,B,C,D) eigentlich nur 1 großes sind: AH + AL = AX AX = die unteren 16 Bit von EAX EAX = die unteren 32 Bit von RAX Das gleiche gilt für RBX, RCX, RDX.
Code:
-----------RAX-----------
|----EAX----- | |--AX-- | | | | | | |AH|AL| |
AW: Fehler beim Byte-Swap mit Assembler in Delphi
Moin moin,
erstmal danke für eure Erklärungen. Ich konnte es gestern Abend noch unter einem XE2 testen. Wenn ich allerdings eine x64 Version erstellt habe und diese auf einer x64 CPU ausführe, funktioniert es nicht wie gewünscht. Ursache ist wohl, dass bei 64bit der Wert DW nicht in EAX übergeben wird, sondern in ECX. (Falls diese Erklärung falsch ist, dann korrigiert mich)
Delphi-Quellcode:
So hat es jedenfalls auf 32bit wie auch auf 64bit funktioniert.
function SwapDWord(DW: DWord): DWord;
asm {$IFDEF CPUX64} MOV EAX, ECX {$ENDIF CPUX64} BSWAP EAX end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz