我写了这段代码(这只是其中的一部分):
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的值。
发布于 2013-06-06 02:07:49
PCSpim模拟的处理器MIPS采用“延迟分支”:它执行紧跟在分支之后的指令,然后转移到跳转目标(因此“延迟”跳转)。这是一个效率指标;因为处理器已经完成了“额外”指令的大部分工作,所以这些工作不会被浪费。编译器在生成代码时会考虑到这一点。
我相信在模拟器中有一个禁用延迟分支的选项。
https://stackoverflow.com/questions/16946819
复制相似问题