所以我试图弄清楚如何使用get系统时间系统调用生成一个包含10个不同的随机整数字符的字符串,但输出总是产生一个相同字符的10位数字符串(例如“mmmmmmmmmm” )而不是10位数的随机字符串(例如“SdgeuEOufm”)。
对于我做错的任何想法都将不胜感激!
.data:
string: .space 11
upper: .word 0
lower: .word 0
.text:
la $t0, string
li $t1, 0
la $t2, upper
la $t3, lower
main:
li $v0, 30
syscall
li $v0, 40
syscall
li $a1, 58
li $v0, 42
syscall
addi $a0, $a0, 65
sb $a0, ($t0)
addi $t0, $t0, 1
addi $t1, $t1, 1
blt $t1, 10, main
sb $zero, 0($t0)
la $a0, string
li $v0, 4
syscall
答案 0 :(得分:2)
让我们看看你在循环中使用的一些系统调用:
li $v0, 30
syscall
li $v0, 40
syscall
MARS系统调用30 - 时间(系统时间)(自1970年1月1日以来的毫秒数)
$a0
=低位32位系统时间
$a1
=高阶32位系统时间。
MARS系统调用40 - 设置种子
$a0
= i.d.伪随机数发生器(任何int)。
$a1
=相应伪随机数生成器的种子。
换句话说,您正在使用毫秒计数的高32位来在循环的每次迭代中播种PRNG。除非你的循环迭代需要很长的时间才能在每次迭代中为你提供相同的种子,这将导致每次迭代时PRNG的输出相同。
我的建议是只对PRNG播种一次(在循环开始之前),并使用系统时间的低32位而不是高位。