Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Erklärung Register Direktive gesucht (https://www.delphipraxis.net/206348-erklaerung-register-direktive-gesucht.html)

TurboMagic 12. Dez 2020 14:40

Erklärung Register Direktive gesucht
 
Hallo,

der Code-Schnippsel stammt aus dem Zufallszahlengenerator der DEC und ich versuche
den zu verstehen. Eigentlich kenne ich die Register-Direktive als Angabe der Calling
convention, aber so wie es hier mit register = nil angegeben ist sagt mir das nichts.
Kann mir das jemand erklären?

Delphi-Quellcode:
var
  // secure PRNG initialized by this unit
  DoRandomBuffer: procedure(var Buffer; Size: Integer); register = nil;
  DoRandomSeed: procedure(const Buffer; Size: Integer); register = nil;
Grüße
TurboMagic

stahli 12. Dez 2020 14:58

AW: Erklärung Register Direktive gesucht
 
Ich denke, das wird einfach eine Startinitialisierung sein wie
Delphi-Quellcode:
var
  I: Integer = 100;
Sieht halt in der Konstellation etwas komisch aus.

TurboMagic 12. Dez 2020 15:10

AW: Erklärung Register Direktive gesucht
 
Naja, nach dem eigentlich Register; den Compiler anweisen soll, alle Parameter möglichst
über CPU-Register statt dem Stack zu übergeben verstehe ich nicht welchen sinn eine Zuweisung
mit nil hier haben soll...:?

TurboMagic 12. Dez 2020 15:28

AW: Erklärung Register Direktive gesucht
 
Ah!

Hab's gerade selber verstanden: das ganze ist eine Variable, die euf eine Prozedur zeigt,
die eben mit Aufrufkonvention Register arbeiten soll und die an der Stelle wo diese
Variable deklariert wird mal sauber auf nil gesetzt werden soll.

Wird dann im initialization Teil der betreffenden Unit mit einer richtigen Prozedur
zugewiesen.

himitsu 14. Dez 2020 17:49

AW: Erklärung Register Direktive gesucht
 
genau, register ist keine directive, sondern eine convention
und das als Typ für die Variable, mit Initial-Wert (der aber sowieso immer NIL ist, auch ohne Angabe)

http://docwiki.embarcadero.com/RADSt...l_und_safecall
https://de.wikipedia.org/wiki/Aufrufkonvention

Das gilt aber nur für Win32.
* wie das in Android/iOS/OSX/Linux aussieht ... keine Ahnung
* in Win64 wird es aber vom Compiler ignoriert, da es hier im "System" eine Vorgabe gibt (für alle Programmiersprachen)
-> sieht ähnlich wie standardmäßig im "Pascal" aus (von Links erst in die Register und der Rest auf den Stack) und immer mit StackFrame drumrum



Ich vergess es immer, aber ich glaub Delphi/Pascal macht standardmäßig "register"
und "pascal" ist bissl was Anderes (vielleicht war das im TurboPascal mal der Standard),
also eigentlich wäre diese Angabe somit nicht nötig.
Aber Vielleicht arbeitet der FreePascal-Compilerstandardmäßig eventuell ein bissl anders.

TurboMagic 14. Dez 2020 21:14

AW: Erklärung Register Direktive gesucht
 
Ja, ich kann das auch nicht genau beurteilen und will auch nicht zuviel Arbeit in den Zufallszahlengenerator stecken...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 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