2013-03-27 147 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