2013-03-27 144 views
0

我試圖讓MIPS生成32位隨機整數。我試圖使用下面的代碼,但是當我運行該程序時出現錯誤。MIPS 32位隨機整數

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

我正在使用MARS模擬器。該程序彙編沒有任何錯誤。執行上面的系統調用時會發生問題。我會很感激任何幫助。

+0

並且錯誤是...? – 2013-03-27 18:55:05

+0

由於它使用Java的隨機數支持,它可能只支持有符號數。我會建議嘗試少於2^31的數字。 – Gabe 2013-03-27 19:00:37

+0

@MarcB它說範圍的上限不能是負數。 – harbinger 2013-03-27 19:15:45

回答

2

我認爲問題在於您提供的最大數量(0xffffffff)。嘗試使用(簽字)最大正值(0x7fffffff

addi $v0, $zero, 42 
li $a1, 0x7fffffff #32 bit number (maximum 32bit signed positive number) 
syscall 

按OP的評論,得到一個32位的號碼,你可以做的兩個步驟:首先「拋硬幣」獲得第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 
+0

正如我在上面的評論中提到的,該程序接受2^31。但我想讓程序給我一個介於0和2^32之間的隨機值。 – harbinger 2013-03-27 19:18:55

+0

@harbinger:見編輯答案 – gusbro 2013-03-27 19:42:07