AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rotate in Delphi-Language?

Ein Thema von himitsu · begonnen am 26. Okt 2014 · letzter Beitrag vom 28. Okt 2014
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

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

Rotate in Delphi-Language?

  Alt 26. Okt 2014, 02:03
Delphi-Version: 5
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:
function ROL(Value: Integer; Count: Byte): Integer; inline;
asm
  ROL EAX, DL
end;
Aber vorallem in Bezug auf Multiplattform macht sich Assembler eh nicht so gut
und sowas wie (a shl i) or (a shr (32-i)) ist doch auch nicht wirklich eine schöne Lösung, vorallem da doch praktisch alle CPUs solche Befehle direkt unterstüzen.
$2B or not $2B

Geändert von himitsu (26. Okt 2014 um 02:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Rotate in Delphi-Language?

  Alt 26. Okt 2014, 11:58
Zitat von himitsu:
Aber vorallem in Bezug auf Multiplattform macht sich Assembler eh nicht so gut
und sowas wie (a shl i) or (a shr (32-i)) ist doch auch nicht wirklich eine schöne Lösung, vorallem da doch praktisch alle CPUs solche Befehle direkt unterstüzen.
Mhm, in C/C++ gibt es solche Konstrukte, die praktisch von jedem Compiler zu ROR/ROL übersetzt/optimiert werden. Vielleicht funktioniert das bei Delphi auch?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Rotate in Delphi-Language?

  Alt 26. Okt 2014, 12:36
Als ich das letzte Mal nachsah, da war er nicht so schlau.
$2B or not $2B
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Rotate in Delphi-Language?

  Alt 26. Okt 2014, 20:57
Mit einer winzigen Veränderung gehts auch in 64-Bit:

Delphi-Quellcode:
function ROL(Value: Cardinal; Count: Byte): Cardinal; assembler; //Beachte die Direktive
asm
   ROL EAX, DL
end;
Cardinals, weil das ganze als unsigned-Rotate arbeitet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Rotate in Delphi-Language?

  Alt 26. Okt 2014, 22:30
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Rotate in Delphi-Language?

  Alt 27. Okt 2014, 13:24
Wozu braucht man eigentlich den 'Rotate' Operator so?
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Rotate in Delphi-Language?

  Alt 27. Okt 2014, 14:14
Sprünge sind aber ungünstig und inlining klappt bei Assembler nicht so gut.
Gar nicht!

Aus der OH : "Für Routinen, die Assembler-Code enthalten, wird kein Inlining vorgenommen."
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Rotate in Delphi-Language?

  Alt 27. Okt 2014, 14:24
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.
$2B or not $2B
  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
 
#9

AW: Rotate in Delphi-Language?

  Alt 27. Okt 2014, 14:42
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
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 himitsu
himitsu

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

AW: Rotate in Delphi-Language?

  Alt 27. Okt 2014, 15:08
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ß.
http://www.heise.de/tp/artikel/5/5274/1.html
$2B or not $2B

Geändert von himitsu (27. Okt 2014 um 15:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:50 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