Wie kann ich die Zufallszahl von Intels Prozessor mit Assembler bekommen?

8

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.

    
Polina Sazonova 10.07.2012, 05:26
quelle

2 Antworten

11

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:

%Vor%

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.)

    
duskwuff 10.07.2012, 05:32
quelle
5
  

... 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 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).

%Vor%

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).

    
jww 04.05.2014 18:56
quelle

Tags und Links