我正在为我的一个课程使用 MARS 用 MIPS 代码编写一个游戏,并且我正在尝试使用随机数生成器,根据它输出的随机数,打印特定的字符串。我的问题是,当选择随机数时,无论值如何,都会打印相同的情况。 这是我当前的代码:
.data
arrayAddress: .word 268501028
array1: .asciiz "first case"
array2: .asciiz "second case"
array3: .asciiz "third case"
array4: .asciiz "fourth case"
array5: .asciiz "fifth case"
ln: .asciiz "\n"
.text
randNum:
li $a1, 5 # max bound
li $v0, 42 # rand num based on bounds
syscall
add $a0, $a0, 1 # low bound
li $v0, 1 # print rand val based on bounds
syscall
li $v0, 4 # print new line
la $a0, ln
syscall
j caseVal
caseVal:
beq $v0, 1, caseVal1
beq $v0, 2, caseVal2
beq $v0, 3, caseVal3
beq $v0, 4, caseVal4
beq $v0, 5, caseVal5
j main
caseVal1:
la $t0, array1
li $v0, 4
la $a0, array1
syscall
j main
caseVal2:
la $t0, array2
li $v0, 4
la $a0, array2
syscall
j main
caseVal3:
la $t0, array3
li $v0, 4
la $a0, array3
syscall
j main
caseVal4:
la $t0, array4
li $v0, 4
la $a0, array4
syscall
j main
caseVal5:
la $t0, array5
li $v0, 4
la $a0, array5
syscall
j main
main:
li $v0, 4
la $a0, ln
syscall
#j randNum
la $t0, ($a0)
li $v0, 4
syscall
一个例子是,如果我得到值2,它也应该打印出“第二个案例”,但它打印出“第四个案例”,这与每个单个案例相同,它总是打印“第四个案例”。有谁明白这里的问题是什么,或者向我指出解释该问题的资源?这段代码是我制作的测试程序,在我的实际游戏中,输出将是一个选择打印的数组。如果我能得到任何帮助,那就太好了!
我希望输出打印出生成的随机值和相应的案例字符串(稍后将是一个数组)。我尝试更改 case 调用的结构只是为了看看会发生什么,我尝试将相应 case 字符串的地址加载到变量中,看看是否可以在我的主函数中使用该值。
这是我自己的问题的解决方案,以防有人最终需要类似问题的帮助:
.data
arrayAddress: .word 268501028
array1: .asciiz " first case"
array2: .asciiz " second case"
array3: .asciiz " third case"
array4: .asciiz " fourth case"
array5: .asciiz " fifth case"
ln: .asciiz "\n"
.text
randNum:
li $a1, 5 # max bound
li $v0, 42 # rand num based on bounds
syscall
add $a0, $a0, 1 # low bound
li $v0, 1 # print rand val based on bounds
syscall
j caseVal
caseVal:
beq $a0, 1, caseVal1
beq $a0, 2, caseVal2
beq $a0, 3, caseVal3
beq $a0, 4, caseVal4
beq $a0, 5, caseVal5
j main
caseVal1:
la $t0, array1
li $v0, 4
la $a0, array1
syscall
j main
caseVal2:
la $t0, array2
li $v0, 4
la $a0, array2
syscall
j main
caseVal3:
la $t0, array3
li $v0, 4
la $a0, array3
syscall
j main
caseVal4:
la $t0, array4
li $v0, 4
la $a0, array4
syscall
j main
caseVal5:
la $t0, array5
li $v0, 4
la $a0, array5
syscall
j main
main:
li $v0, 4
la $a0, ln
syscall
#j randNum
la $t0, ($a0)
li $v0, 4
syscall