0

我写了这段代码(这只是其中的一部分):

beq $t4 ,$0 ,__less3
    add $s2,$t3,$0 # s2=t3
    add $s3,$t2,$0 # s3=t2
    j __next1

 __less3:
    add $s2,$t2,$0 # s2=t2
    add $s3,$t3,$0 # s3=t3
 __next1:
    slt $t4, $t1, $t0 # t4=(t1<t0)
    beq $t4 ,$0 ,__les1sk

问题是,当模拟到达第 4 行并需要跳转时,它会执行第 7 行(下一个命令),然后才跳转到第 10 行。我知道是因为寄存器 $s2 更改为 $t2 而不是剩余的价值来自 $t3。

4

1 回答 1

0

PCSpim 模拟的处理器 MIPS 采用“延迟分支”:它在分支到跳转目标之前立即执行分支之后的指令(因此“延迟”跳转)。这是一种效率措施;由于处理器已经完成了该“额外”指令的大部分工作,因此不会浪费这种努力。编译器在生成代码时会考虑到这一点。

我相信模拟器中有一个选项可以禁用延迟分支。

于 2013-06-05T18:07:49.310 回答