汇编:使用MIPS生成多个随机整数?

时间:2014-02-12 03:22:29

标签: assembly random int character mips

所以我试图弄清楚如何使用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     

1 个答案:

答案 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位而不是高位。