在MIPS中使用随机数生成器?

时间:2014-04-06 22:49:43

标签: random mips mars-simulator

所以我正在阅读这个网站上的一些主题,我找到了一个如何制作一个... 但是,我无法找到解释更多如何编码的链接。 我的课程教材根本没有提供有关RNG的任何信息,所以没有帮助。

代码是

li $a1, 4
li $v0, 42
add $a0, $a0, 1

这对于要求1-3之间的范围是正确的吗? 我尝试输出它的随机数,但它不断给我相同的数字。

#sw $a0, 0($s0)
li $a1, 4
li $v0, 42
add $a0, $a0, 1
#syscall

li $v0, 4
la $a0, Checking
syscall

li $v0, 1
move $t0, $a0
syscall

我看到了sw $a0, 0($s0),但我不确定它是做什么的 - 是否需要输出? (我拿出来是因为在我按下一把钥匙去RNG之后,它说程序崩溃了) 我一直得到268501267的输出,我不确定这意味着什么 编辑:现在它开始一直给我268500992

任何人都可以帮助解释一下这个问题吗?

从逻辑上讲 - 我理解42来自何处以及为什么我需要添加+1(这样我就不会得到0的值)

从那里开始,我不清楚为什么代码不能输出我给出的范围内的数字。

1 个答案:

答案 0 :(得分:1)

正如MARS文档(帮助> Syscalls)所述:

  

random int 41 $ a0 = i.d.伪随机数生成器(任何int)。   $ a0包含下一个伪随机数,均匀分布的int值   来自这个随机数生成器的序列

所以

li $v0, 41         ; Service 41, random int
xor $a0, $a0, $a0  ; Select random generator 0
syscall            ; Generate random int (returns in $a0)

li $v0, 1  ; Service 1, print int
syscall    ; Print previously generated random int

每次打印不同的号码时,对我来说都很好。