![]() |
Delphi-Version: 5
Rotate in Delphi-Language?
Moin moin,
warum gibt es eigentlich nur SHL und SHR, aber z.B. nicht ROL und ROR in der Delphi-Language? Ja, man kann das z.B. via Assembler lösen, aber Inline-Assembler gibt jes ja nicht mehr (Win64 - innerhalb von Prozeduren), sondern nur noch als ganze Funktionen, wo das Inline auch nicht (richtig) funktioniert.
Delphi-Quellcode:
Aber vorallem in Bezug auf Multiplattform macht sich Assembler eh nicht so gut
function ROL(Value: Integer; Count: Byte): Integer; inline;
asm ROL EAX, DL end; und sowas wie
Delphi-Quellcode:
ist doch auch nicht wirklich eine schöne Lösung, vorallem da doch praktisch alle CPUs solche Befehle direkt unterstüzen.
(a shl i) or (a shr (32-i))
|
AW: Rotate in Delphi-Language?
Zitat:
|
AW: Rotate in Delphi-Language?
Als ich das letzte Mal nachsah, da war er nicht so schlau. :?
|
AW: Rotate in Delphi-Language?
Mit einer winzigen Veränderung gehts auch in 64-Bit:
Delphi-Quellcode:
Cardinals, weil das ganze als unsigned-Rotate arbeitet.
function ROL(Value: Cardinal; Count: Byte): Cardinal; assembler; //Beachte die Direktive
asm ROL EAX, DL end; |
AW: Rotate in Delphi-Language?
Sprünge sind aber ungünstig und inlining klappt bei Assembler nicht so gut.
Dann fehlt ja nur noch OSX (das dürfte aber mit dem Win64 übereinstimmen) und dann gibt es noch iOS, iOS64, Android, Linux usw. |
AW: Rotate in Delphi-Language?
Wozu braucht man eigentlich den 'Rotate' Operator so?
|
AW: Rotate in Delphi-Language?
Zitat:
Aus der OH : "Für Routinen, die Assembler-Code enthalten, wird kein Inlining vorgenommen." |
AW: Rotate in Delphi-Language?
Das ist wie das SHL/SHL, nur daß dort die Bits nicht ins Nichts rausgeschoben werden, sondern auf der anderen Seite wieder rein rutschen.
Wird meisten bei Verschlüsselungs-, Hash- und Prüfsummenfunktionen benutzt. |
AW: Rotate in Delphi-Language?
Hab auch mal etwas rumprobiert aber ich befürchte ohne calls kriegt mans nicht hin.
Vielleicht mit ganz brutalen Hacks aber sonst eher nicht. Habe auch mal versucht einen eigenen Integer Typ zu definieren und rol/ror als class operator (für shl/shr) zu implementieren weil ich gehofft hatte er inlined class operatoren vielleicht, aber war leider auch nicht der Fall. Dann musst du wohl die ganze Methode wo du rol/ror brauchst in Assembler schreiben :mrgreen: |
AW: Rotate in Delphi-Language?
Meine MD5 und CRC-Codes in Assembler wollte ich halt abschaffen und als Pure-Pascal implementieren, um sie plattformunabhängig zu haben.
Im Windows könnte ich die geheimen MD5/SHA1-WinAPIs der advapi.dll verwenden. Bei OSX, iOS, Android und im nächsten Jahrhundert wieder Linux müsste man mal schauen, ob die nicht vielleicht auch schon was haben, was man schön in einer plattformübergreifenden Klasse/Funktion kapseln kann. Und wo es das nicht gibt oder es zu umständlich ist, dann eben meine Implementation. Ansonsten hab ich überlegt, ob ich nicht stattdessen z.B. auf IdHashMessageDigest umsteige, wo ich aber den Overhead noch nicht kenn. (die EXEn sind ja eh schon viel zu groß, da kommt es auf ein paar mehr Byte auch nicht mehr drauf an) [edit] Wobei man mit APIs auch vorsichtig sein muß. :roll: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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