如何让我的 MIPS 代码根据随机数输出特定案例值?

问题描述 投票:0回答:1

我正在为我的一个课程使用 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 字符串的地址加载到变量中,看看是否可以在我的主函数中使用该值。

mips machine-code mars-simulator
1个回答
0
投票

这是我自己的问题的解决方案,以防有人最终需要类似问题的帮助:

.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
© www.soinside.com 2019 - 2024. All rights reserved.