3

私はアセンブリが初めてで、簡単なプログラムを作成しようとしています。このために、乱数を生成する必要があります。

FASMコンパイラでこれを行う方法を知っている人はいますか?

4

4 に答える 4

5

線形合同アルゴリズムを使用できます。最も一般的な疑似乱数アルゴリズムです。

基本的に、シード値があります。そして、乱数の生成を開始すると、各数値が新しいリクエストのシードになります。

数値は次のように生成されます。

x = (a * s + b) MOD m

ここで、m、a、および b がアルゴリズム用に選択されます。使用されるこれらの値の一般的なセットがいくつかあります。2 の累乗、特に 32 ビット マシンの場合は 2^32 にすると、はるかに簡単になります。その後、mod ステップはマシンによって自動的に行われます。

ウィキペディアをチェックしてください。人気のある a、b、M のセットと、さらに多くの情報があります。

シードを使用して実行できるより複雑な処理もあります (たとえば、現在の時刻に基づいてシードを設定する)。

于 2009-01-26T12:17:39.790 に答える
2

私は R250 の大ファンで、LCG よりもはるかに高速に実行できます。 http://www.ddj.com/184408549?pgno=7

昔私が書いていた古いアセンブリ コードの速度が大幅に向上したことを示しています。

于 2009-01-26T13:13:09.693 に答える
1

このウィキペディアのページを見て、アルゴリズムを選択して実装してください。

編集:または、簡単なルートを取ることもできます。OS の C ランタイムを使用して、rand 関数を呼び出します。

于 2009-01-26T12:07:04.083 に答える
0

乱数

これは少しあいまいな質問です。

これまでのポスターのほとんどはおそらく正しいです。彼らは疑似乱数を生成する方法を説明していて、それはおそらくあなたが必要としているものです。現在の時刻でアルゴリズムをシードします(OSにそれを要求するか、クロックチップから読み取る必要があります)。これにより、ゲームやその他の簡単な使用に十分な「乱数」が得られます。

ただし、これらの「乱数」をセキュリティアプリケーション(暗号化、キー生成など)に使用しないでください。セキュリティアプリケーションには、暗号的に安全な非常に優れた乱数ジェネレータが必要です。それらの1つを書くことは本当に難しいです。(Netscapeはそれを間違えたので、Netscape Navigatorの初期のバージョンには簡単にハッキングできるHTTPS実装がありました。Debianはごく最近それを間違え、簡単にハッキングできるSSHおよびHTTPS / SSLキーのロードにつながりました)。

于 2009-01-26T13:24:20.747 に答える