Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly MIPS分支问题_Assembly_Mips_Pcspim - Fatal编程技术网

Assembly MIPS分支问题

Assembly MIPS分支问题,assembly,mips,pcspim,Assembly,Mips,Pcspim,我在MIPS做一个项目;我们可以创造任何我们想要的东西,只要它符合一定的要求。无论如何,我选择了做一个琐碎的节目,虽然很难,但并非不可能。今天我的分支遇到了问题 incrEScore: add $t9, $t9, 1 #increment incr. counter add $t8, $t8, 1 #increment counter move $v0, $t8

我在MIPS做一个项目;我们可以创造任何我们想要的东西,只要它符合一定的要求。无论如何,我选择了做一个琐碎的节目,虽然很难,但并非不可能。今天我的分支遇到了问题

incrEScore:

    add     $t9, $t9, 1             #increment incr. counter
    add     $t8, $t8, 1             #increment counter
    move    $v0, $t8                    #move to $v0

    beq     $v0, $s2, eQTwo         #counter=2, question 2
    beq     $v0, $s3, eQThree           #counter=3, question 3
    beq     $v0, $s4, eQFour            #counter=4, question 4
    beq     $v0, $s5, eQFive            #counter=5, question 5
    bgt     $v0, $t8, eTally            #counter>5, eTally

decrEScore:

    add     $a3, $a3, 1             #increment decr. counter
    add     $t8, $t8, 1             #increment counter
    move    $v0, $t8                    #move to $v0

    beq     $v0, $s2, eQTwo         #counter=2, question 2
    beq     $v0, $s3, eQThree           #counter=3, question 3
    beq     $v0, $s4, eQFour            #counter=4, question 4
    beq     $v0, $s5, eQFive            #counter=5, question 5
    bgt     $v0, $t8, eTally            #counter>5, eTally

eTally:

    beq     $t9, $s5, eWin          #if increment counter = 5, branch to Easy Win
    bltu    $a3, $s5, eLoss         #if decrement counter < 5, branch to Easy Loss
出现的问题是,不是所有的问题都是运行它们的过程的等式和完全递增或递减的计数器,如果在任何时候有一个问题是错误的,eTally将立即转移到损失。这导致其他问题被切断/不运行,主菜单弹出。我试着用“blt”代替“bltu”,我也试着只用递增计数器代替递增和递减计数器,但发现这些都不能解决问题

代码几乎是1k行。
简单的部分是第165到299行。

通过一些帮助解决了这个问题!Jester你是对的-$t8被初始化为0,而不是1,它把所有东西都扔掉了

这只是一个粗略的猜测,但是您是否解释了分支延迟槽?使用您的模拟器逐步检查代码,看看哪里出错了。这里有一些非常可疑的分支,比如第240行和第252行,由于v0是从t8初始化的,所以它们总是错误的。是的,$s5应该是第240行和第252行上的$t8所在的位置。
    li  $s0, 0                      #init score
    li  $s1, 1                      #constant; menu num; answer num
    li  $s2, 2                      #constant; menu num; answer num
    li  $s3, 3                      #constant; menu num; answer num
    li  $s4, 4                      #constant; menu num; answer num
    li  $s5, 5                      #constant; counter compare point
    li  $s6, 6                      #constant
    li  $s7, 7                      #constant
    li  $t0, 8                      #constant
    li  $t1, 9                      #constant
    li  $t2, 10                 #constant; counter compare point
    li  $t3, 11                 #constant
    li  $t4, 12                 #constant
    li  $t5, 13                 #constant
    li  $t6, 14                 #constant
    li  $t7, 15                 #constant; counter compare point
    li  $t8, 0                      #question counter
    li  $t9, 0                      #increment counter
    li  $a3, 0                      #decrement counter
    li  $a1, 100                    #constant