0

所以我在这个网站上阅读了一些主题,我找到了一个关于如何制作的主题。但我真的找不到一个链接来解释更多关于如何编码的链接。我的课程教科书没有提供任何内容根本没有关于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 的值)

从那里开始,我不知道为什么代码不会输出我给出的范围内的数字。

4

1 回答 1

2

MARS 文档所述(在 GUI 帮助 > 系统调用中):

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

所以

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

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

对我来说效果很好,每次打印不同的数字。

您不需要在使用之前初始化或播种随机流,您可以使用流 0。

于 2014-04-06T23:46:34.567 回答