1

1〜4の範囲のアセンブリコードを使用して乱数を生成するにはどうすればよいですか?

4

4 に答える 4

3

1 +(rand()%4)、一般的に(rand()はまともなランダム整数ジェネレーターです)。

call [_rand]
mod eax, 4 ; or 'and eax, 3' - same thing
inc eax

rand()の実装方法については、メルセンヌツイスターなどを読んでくださいが、かなり複雑です。

于 2010-03-31T02:12:13.603 に答える
1

独自の準乱数ジェネレーターを実行できます。RTC(リアルタイムクロックカウンター)またはCPUタイムスタンプにアクセスできる場合は、比較的簡単にルーチンを実行できます。

非常に簡単な例:

Int LastIteration;
Int IterationCounter;

...


++IterationCounter;
LastIteration = CpuTimeStamp + IterationCounter;
RndNum = LastIteration & 3 + 1;

この準rndジェネレーターは、1秒あたりに生成される数値が多く必要ない場合は、十分に予測できません。

于 2010-03-31T07:15:09.110 に答える
1

これは、APIが提供しない場合に、いくらか「ランダムな」数値を取得するための簡単な手法です(ただし、実際には乱数ではありません)。

  1. 可変時間=システム時間を取得
  2. 可変剰余=時間%4
  3. 変数randomNumber=時間+1

これはすべての言語で使用できます(時間にアクセスできる場合)。

68Kの高度な乱数ジェネレーターについては、このリンクを参照してください。

于 2010-03-31T17:42:35.827 に答える
0

これを実行しようとしているシステムがわからないため、次のいずれかに関係なく適用される一般的な回答を次に示します。

query the system time, using whatever syscall / library call / api you have available
and out the top bits, leaving only the lowest 2

ただぁ。ランダム番号。

それらをよりランダムに使用したい場合は、代わりにこれを実行してください。

query the system time
and out the top bits leaving only the lowest 4 store in "register1"
Loop:
       do something unimportant
       do something else unimportant
       etc.
       count down register1
       jump to EndLoop if register1==0
       jump Loop
EndLoop:
query the system time
and out the top bits, leaving just the lower two

乾杯!

/ B2S

編集:申し訳ありませんが、インターネットの手の届かないところに休暇中です。(はい、そのような場所がまだ存在していることは本当に驚くべきことです)私はEyeBotも68kasmも特によく知っていません。だから私は時計や時刻を読み取るためのシステムコールを知りません(どちらでもかまいません)。1つ上を見て、残りのコードは次のようになります。


//Assuming you have called the syscall to get the system time/clock, and stored it in D0
      AND #%01111, D0
loop: 
     // It really doesn't matter,
     // What Instructions you put here,
     // just put 4 or 5 instructions that don't
     // mess with D0, eg. AND, MOVE, ADD, AND, OR

      SUB #1, D0

      TST D0  // TST instruction is probably not needed
      BEQ EndLoop
      JMP loop
EndLoop:
//      Get the system time/clock again (Next instruction assumes clock is in D0)
      AND #%011, D0

これで、D0に乱数が含まれるはずです

于 2010-03-31T02:17:48.067 に答える