提问人:TheBlinded 提问时间:11/4/2023 最后编辑:Erik EidtTheBlinded 更新时间:11/4/2023 访问量:18
如何让我的 MIPS 代码根据随机数字输出特定的案例值?
How can I get my MIPS code to output a specific case value based on a randomized number?
问:
我正在使用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,它也应该打印出“第二种情况”,但它打印出“第四种情况”,这也与每个 sinle 大小写相同,它总是打印“第四种情况”。有没有人了解这里的问题是什么,或者向我指出解释问题的资源?这段代码是我制作的测试器,在我的实际游戏中,输出将是一个选择打印的数组。如果我能得到任何帮助,那就太棒了!
我希望输出打印出生成的随机值和相应的大小写字符串(稍后将是一个数组)。我试图改变案例调用的结构,只是为了看看会发生什么,我试图将相应案例字符串的地址加载到一个变量中,看看我是否可以在我的主函数中使用该值。
答:
0赞
TheBlinded
11/4/2023
#1
这是我自己问题的解决方案,以防有人最终需要类似问题的帮助:
.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
下一个:洗白指针会破坏优化机会吗?
评论