延迟槽指令深度理解及流水线时空图

	addiu t0, $0, 100         // (1)
	addiu t0, t0, 1     	  // (2)
LOOP:
	addiu t0, t0, -1		  // (3)
	bne   t0, $0, LOOP		  // (4)
	load  ra, 28(sp)          // (5)

首先画出这条指令的五级流水线时空图
在这里插入图片描述

当执行到第三条指令时,要决定是否跳转,但是这个跳转最多只能在译码阶段才能知道是否发生,如果条件成立就要发生跳转,那么(5)指令的取值就得清空,如果不清空,(6)第6条指令(就是跳转后的指令)就开始执行那么就多执行了一条指令(5)这就会导致程序算出来结果是错的

但是要清空这条指令,就会耗费一定的时间,而清空后的(5)指令的取值 这块就会产生一个空格(专业术语叫bubble),即下面这张图
在这里插入图片描述

那么如何才能消除这种情况(要清理(4)那条指令,需要时间,并且会产生bubble)

那就是接下来要引出的延迟槽指令:
首先把程序调整为如下

	addiu t0, $0, 100          // (1)
LOOP:
	bne   t0, $0, LOOP		   // (2)
	addiu t0, t0, -1		   // (3)
	load  ra, 28(sp)           

修改后的指令的五级流水线时空图

在这里插入图片描述
这样的话,因为(3)指令是一定要执行的,即使(2)指令只能在译码完成之后才能决定是否跳转,也就是(4)指令不管咋执行,就不需要去清空3指令了,这就是延迟槽,(3)指令叫延迟槽指令

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云风Com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值