AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Fehler beim Byte-Swap mit Assembler in Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim Byte-Swap mit Assembler in Delphi

Ein Thema von turboPASCAL · begonnen am 1. Jul 2005 · letzter Beitrag vom 29. Feb 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

AW: Fehler beim Byte-Swap mit Assembler in Delphi

  Alt 28. Feb 2012, 10:26
Das sollte unter 64 Bit ganz genauso funktionieren.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Fehler beim Byte-Swap mit Assembler in Delphi

  Alt 28. Feb 2012, 10:40
Danke Michael,

aber kannst du mir noch kurz sagen warum das so ist? Weil nach meiner "Vorstellung" sollte es doch so sein:
Code:
//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
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)
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#13

AW: Fehler beim Byte-Swap mit Assembler in Delphi

  Alt 28. Feb 2012, 10:44
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?
(mit 32 Bit-Wert auf 64 Bit-CPU wird es bestimmt funktionieren)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

AW: Fehler beim Byte-Swap mit Assembler in Delphi

  Alt 28. Feb 2012, 11:36
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|
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (28. Feb 2012 um 11:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#15

AW: Fehler beim Byte-Swap mit Assembler in Delphi

  Alt 29. Feb 2012, 09:24
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:
function SwapDWord(DW: DWord): DWord;
asm
{$IFDEF CPUX64}
   MOV EAX, ECX
{$ENDIF CPUX64}
   BSWAP EAX
end;
So hat es jedenfalls auf 32bit wie auch auf 64bit funktioniert.
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz