如何在PCSpim仿真中使用跳转

时间:2013-06-05 18:01:44

标签: pcspim

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

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的值。

1 个答案:

答案 0 :(得分:0)

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

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