0

MIPS に 32 ビットのランダムな整数を生成させようとしています。次のコードを使用しようとしていますが、プログラムを実行するとエラーが発生します。

addi $v0, $zero, 42
li $a1, 4294967295 #32 bit number
syscall

MARSシミュレーターを使用しています。プログラムはエラーなしでアセンブルされます。上記のシステムコールを実行すると問題が発生します。どんな助けにも本当に感謝しています。

4

1 に答える 1

2

問題は、提供された最大数にあると思います ( 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
于 2013-03-27T18:59:09.687 に答える