MIPS に 32 ビットのランダムな整数を生成させようとしています。次のコードを使用しようとしていますが、プログラムを実行するとエラーが発生します。
addi $v0, $zero, 42
li $a1, 4294967295 #32 bit number
syscall
MARSシミュレーターを使用しています。プログラムはエラーなしでアセンブルされます。上記のシステムコールを実行すると問題が発生します。どんな助けにも本当に感謝しています。
問題は、提供された最大数にあると思います ( 0xffffffff
)。(符号付き) 正の最大値 ( 0x7fffffff
)を使用してみてください
addi $v0, $zero, 42
li $a1, 0x7fffffff #32 bit number (maximum 32bit signed positive number)
syscall
OP のコメントによると、32 ビットの数値を取得するには、2 つの手順で行うことができます。最初に「コインを投げて」32 番目のビットを取得し、残りの 31 ビットをランダムに取得します。
addi $v0, $zero, 42
move $a2, $zero
li $a1, 2
syscall
bnez $a0, skip
li $a2, 0x80000000
skip:
li $a1, 0x7fffffff #31 bit number (maximum 32bit signed positive number)
syscall
or $a0, $a0, $a2 # Here $a0 has a 32 bit number