![]() |
Re: Verdrehte Bits (Wilde Pointereien)
Nur mal als Hinweis, weil ich mich auch gerade damit rumschlage.
(Edit : Damit das hier nicht falsch stehen bleibt änder ich das mal.) Die CPUs, die auf der Intel Architektur (8086) basieren, legen das niederwertigste Byte zuerst im Speicher ab. Im Gegensatz dazu legen die CPUs, die auf der Motoroler Architektur (6800) basieren, das höstwertigste Byte zuerst im Speicher ab. Deswegen ist Delphi doch manchmal ein ganz schöner Krampf. Bei meiner Anwendung, die ich im Moment schreibe, kommt es nähmlich auch auf die Geschwindigkeit an. Noch eine Sache zu dem "ULONG" das kommt von unsigned long, die C++ler werden damit eher was anfangen können. Mit dem Inlineassembler habe ich noch nicht so richtig verstanden,da ich damit noch nicht gearbeitet habe. Vieleicht kann mir da ja noch jemand helfen. Ich habe jetzt mitten in einer Procedure eine Variable "w: longword;", wie bekomme ich diese Variable jetzt in dass EAX Register und das Ergebniss wieder Zurück in meine Variable? |
Re: Verdrehte Bits (Wilde Pointereien)
Moin Quake,
Zitat:
Intel arbeite mit Little-Endian, Motorola mit Big-Endian. |
Re: Verdrehte Bits (Wilde Pointereien)
Ups :oops: Du hast natürlich Recht. Habe ich oben mal schnell geändert :stupid: .
OK, habe mir das schon selbst beantwortet: (Beispiel ist eine vereinfachte Version)
Delphi-Quellcode:
procedure xyz(Zahl: longword);
var l: longword; begin l := Zahl; asm mov eax, l; bswap eax; mov l, eax; end; Zahl := l; end; |
Re: Verdrehte Bits (Wilde Pointereien)
Zitat:
Wo hakt es denn genau? Das Ergebniss wird übrigens bei einem 32bit-Wert oder Pointer oder weniger als 32bit (Boolean) in EAX zurückgegeben. |
Re: Verdrehte Bits (Wilde Pointereien)
Danke für dein Angebot der Hilfe, aber ich habe es schon hin bekommen. (siehe oben)
Ich habe aber noch eine kleine Abänderung gemacht, jetzt mit einem Pointer. (wieder die Vereinfachte Version)
Delphi-Quellcode:
Eine Frage habe ich doch noch. Dies könnte ich doch auch in ein Macro packen, oder? Wie erstelle ich nur ein Macro?
procedure xyz(Zahl: longword);
var p: ^longword; begin . . . p := @Zahl; asm mov edx, p; mov eax, [edx]; bswap eax; mov [edx], eax; end; . . . end; |
Re: Verdrehte Bits (Wilde Pointereien)
Zitat:
Delphi-Quellcode:
// Siehe dein Code
p^ := @Zahl; asm push edx push eax mov edx, p; mov eax, [edx]; bswap eax; mov [edx], eax; pop eax pop edx end; |
Re: Verdrehte Bits (Wilde Pointereien)
Zitat:
Edit: Hab nochmal nachgeschaut, in der Delphi-Hilfe steht das so drin. Zitat:
Zitat:
|
Re: Verdrehte Bits (Wilde Pointereien)
Zitat:
Überflüssig wäre das ganze hinundherkopieren, weil du das bei dem Aufruf einer anderen Funktion nicht brauchst. |
Re: Verdrehte Bits (Wilde Pointereien)
Onlinehilfe :
Zitat:
Zitat:
|
Re: Verdrehte Bits (Wilde Pointereien)
Was soll denn das Rumgezeigere? Was spricht gegen
Delphi-Quellcode:
asm
mov eax, zahl bswap eax mov zahl, eax end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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