Ich muss eine Zufallszahl von Intels Zufallsgenerator im Prozessor (Intel Core i3) bekommen. Ich möchte keine Bibliothek benutzen. Ich möchte Assembler einfügen in C ++, aber ich weiß nicht, welche Register und Anweisungen verwenden sollten.
Durch den Aufruf der Anweisung RDRAND
auf unterstützten CPUs (derzeit nur Ivy Bridge- und Haswell Intel-CPUs) wird ein zufälliger Wert in ein bestimmtes Register eingefügt. Beispielsweise erhalten Sie einen zufälligen 64-Bit-Wert:
Bei Erfolg wird das Übertragsbit gesetzt. Weitere Informationen finden Sie in Intels Implementierungsleitfaden für Bull Mountain Software . ("Bull Mountain" ist der Codename für Intels Hardware RNG.)
... aber ich weiß nicht, welche Register und Anweisungen verwendet werden sollten.
Unten ist der Inline-Assembler, den ich auf Linux-Rechnern mit GCC verwende. Ich glaube, ich habe einen wichtigen Teil aus einem Intel-Handbuch gerissen. Es wurde wahrscheinlich von David Johnston geschrieben, der die fantastischen technischen Antworten zu rdand getaggt sind Fragen. Er hat auch die Hardware bei Intel entworfen.
%Vor% Und der folgende Code wird für HasRDRAND
verwendet. Es erkennt sowohl AMD- als auch Intel-CPUs (ich denke, das sind alle CPUs, die RDRAND bereitstellen).
Siehe auch Wie benutzt man RDRAND intrinsics? Es beantwortet nicht Ihre unmittelbare Frage, aber es könnte eine Alternative für Sie sein ( und kann anderen helfen).