Assembly 在MIPS上生成随机数

Assembly 在MIPS上生成随机数,assembly,mips,Assembly,Mips,我发现 但它给我的感觉是: 598756802 373297426 -2011171535 这就像打印地址而不是数字值一样。如何修复它 我还需要设置发电机的范围。类似于生成0到99之间的随机数。 我怎么能这样做? Obs:已尝试使用syscall42code,但出现错误。 (OFF:至少告诉我投票失败的原因,我没有水晶球) 代码: .text li $v0, 41 # Service 41, random int syscall

我发现 但它给我的感觉是:

598756802  
373297426  
-2011171535   
这就像打印地址而不是数字值一样。如何修复它

我还需要设置发电机的范围。类似于生成0到99之间的随机数。
我怎么能这样做?
Obs:已尝试使用syscall
42
code,但出现错误。
(OFF:至少告诉我投票失败的原因,我没有水晶球)

代码:

.text
    li $v0, 41          # Service 41, random int    
    syscall            # Generate random int (returns in $a0)
    li $v0, 1          # Service 1, print int
    syscall            # Print previously generated random int  
更新 这总是给我相同的数字,
1000

.text
    li $a1, 2501
    li $v0, 42   #random
    add $a0, $a0, 1000
    li $v0, 1
    syscall

我可以使用以下代码使其工作:

.text
    li $a1, 100  #Here you set $a1 to the max bound.
    li $v0, 42  #generates the random number.
    syscall
    #add $a0, $a0, 100  #Here you add the lowest bound
    li $v0, 1   #1 print integer
    syscall

我可以使用以下代码使其工作:

.text
    li $a1, 100  #Here you set $a1 to the max bound.
    li $v0, 42  #generates the random number.
    syscall
    #add $a0, $a0, 100  #Here you add the lowest bound
    li $v0, 1   #1 print integer
    syscall

您的上一个代码块没有调用RNG系统调用,只有print系统调用

很简单,你只需要做以下几件事

li $v0, 42  # 42 is system call code to generate random int
li $a1, 100 # $a1 is where you set the upper bound
syscall     # your generated number will be at $a0

li $v0, 1   # 1 is the system call code to show an int number
syscall     # as I said your generated number is at $a0, so it will be printed

如果要将生成的数字存储在数组中,这是一种方法:

move $s2, $s0      # copy the initial pointer to save array

li $v0, 42            # system call to generate random int
la $a1, 100       # where you set the upper bound
syscall              # your generated number will be in $a0

sb $a0, 0($s2)     # put the generated number at the position pointed by $s2

addi $s2, $s2, 1       # increment by one the array pointer

因为我们只需要0-100的范围,所以我们可以将每个数字存储在一个字节中,而不是使用
sw
并将指针递增4。

您的上一个代码块没有调用RNG系统调用,只是调用print系统调用

很简单,你只需要做以下几件事

li $v0, 42  # 42 is system call code to generate random int
li $a1, 100 # $a1 is where you set the upper bound
syscall     # your generated number will be at $a0

li $v0, 1   # 1 is the system call code to show an int number
syscall     # as I said your generated number is at $a0, so it will be printed

如果要将生成的数字存储在数组中,这是一种方法:

move $s2, $s0      # copy the initial pointer to save array

li $v0, 42            # system call to generate random int
la $a1, 100       # where you set the upper bound
syscall              # your generated number will be in $a0

sb $a0, 0($s2)     # put the generated number at the position pointed by $s2

addi $s2, $s2, 1       # increment by one the array pointer

因为我们只需要0-100的范围,所以我们可以将每个数字存储在一个字节中,而不是使用
sw
并将指针递增4。

生成随机数所需的只是更改上限,您将在寄存器$s1中获得它。以下代码将生成范围为0..3的随机数

addi $v0, $zero, 30        # Syscall 30: System Time syscall
syscall                  # $a0 will contain the 32 LS bits of the system time
add $t0, $zero, $a0     # Save $a0 value in $t0 

addi $v0, $zero, 40        # Syscall 40: Random seed
add $a0, $zero, $zero   # Set RNG ID to 0
add $a1, $zero, $t0     # Set Random seed to
syscall

addi $v0, $zero, 42        # Syscall 42: Random int range
add $a0, $zero, $zero   # Set RNG ID to 0
addi $a1, $zero, 4     # Set upper bound to 4 (exclusive)
syscall                  # Generate a random number and put it in $a0
add $s1, $zero, $a0     # Copy the random number to $s1

生成随机数所需的只是更改上界,您将在寄存器$s1中获得它。以下代码将生成范围为0..3的随机数

addi $v0, $zero, 30        # Syscall 30: System Time syscall
syscall                  # $a0 will contain the 32 LS bits of the system time
add $t0, $zero, $a0     # Save $a0 value in $t0 

addi $v0, $zero, 40        # Syscall 40: Random seed
add $a0, $zero, $zero   # Set RNG ID to 0
add $a1, $zero, $t0     # Set Random seed to
syscall

addi $v0, $zero, 42        # Syscall 42: Random int range
add $a0, $zero, $zero   # Set RNG ID to 0
addi $a1, $zero, 4     # Set upper bound to 4 (exclusive)
syscall                  # Generate a random number and put it in $a0
add $s1, $zero, $a0     # Copy the random number to $s1

“没有表现出任何研究努力”(或思考)。。。即使在这里,也有大量的资源告诉你如何获得一个范围内的随机数。简单的(尽管统计上并不理想)解决方案是简单地除以100,然后取余数。PS:是的,你打印的数字是随机数,不知道你为什么不这么想。@Jester我试过了dude,但现在它工作了,它总是给我超出范围的东西,或者总是相同的数字…对于更新的代码,你忘了调用
系统调用
;)“没有表现出任何研究努力”(或思考)。。。即使在这里,也有大量的资源告诉你如何获得一个范围内的随机数。简单的(尽管统计上并不理想)解决方案是简单地除以100,然后取余数。PS:是的,你打印的数字是随机数,不知道你为什么不这么想。@Jester我试过了dude,但现在它工作了,它总是给我超出范围的东西,或者总是相同的数字…对于更新的代码,你忘了调用
系统调用
;)感谢您的帮助,我很好奇您将如何将随机整数放入列表或数组中以供重用。@hiquetj您现在可以在我的答案中检查它谢谢您的帮助,我很好奇您将如何将随机整数放入列表或数组中以供重用。@hiquetj您现在可以在我的答案中检查它