关于指令执行周期的细节思考
2016-12-15 23:29
253 查看
关于指令执行周期的细节思考
@(组成原理)(取自2012.44)五段流水线:取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M)、结果写回寄存器(WB)。流水线按序发射,按序完成。不采用数据转发技术,并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。
只看一个方面的问题:若高级语言程序中某赋值语句为:x = a+b,x,a,b均为int型变量,它们的存储单元地址分别为[x],[a],。该语句对应的指令流水线执行过程是:
I1 LOAD R1,[a] I2 LOAD R2,[b] I3 ADD R1,R2 I4 STORE R2,[x]
分析:这样一个简单的指令执行步骤,其实非常值得深入分析,不要跑太快。
首先问,阻塞在指令序列中如何体现的?[b]不连续即阻塞。
比如I3的IF段结束后,后面要隔着三个空格才能接上ID,这三个空格就是阻塞,这个指令因为要等到I2写回数据到R2才能继续下去,ID重新开始时就是在I2的WB写完后,被唤醒。很长时间都没有这么分析,也没看到相关的解答这样串联。
再问一个问题,I4的IF为什么不在I3的ID前面执行?根据题干,要顺序执行,在I3阻塞时,I4的指令是不允许执行的。所以I4的IF才在I3的ID下面,即I3开始工作了,才允许I4继续工作。
另外,IF不允许在M下面,是因为M是访问主存,IF也是访问主存。这是隐含性的条件,是作为常识掌握。题干强调了对寄存器的互斥访问,而刻意忽略了主存的互斥访问。
总之,注意IF和M的互斥,ID和WB的互斥,再加上对阻塞情况下后序指令不许动的理解,这种绘图型,其实很简洁。
相关文章推荐
- 关于执行的思考
- 关于执行的思考
- 关于测试流程设计与执行的思考.
- java基础——关于异步任务串行执行的思考与实现
- 关于异步任务串行执行的思考与实现
- Pentium指令的执行周期数
- 关于ARM9和ARM7中都是PC=当前执行指令地址+8的解释
- 关于在Linux的堆栈段执行代码的实践和思考
- 关于Eclipse编译和执行文件时,后台默认执行动作的思考
- 关于masm中PTR伪指令的一点思考
- CUDA上add.f32指令的执行周期到底是多少?
- 关于时钟周期,机器周期,指令周期等各种周期的总结
- Pentium指令的执行周期数[转]
- 关于周期信号傅利叶级数系数的一点思考
- 关于C函数memcpy的实现细节思考
- 关于执行的思考
- 关于KEIL C里如何执行系统不能识别的新指令
- 嵌入式学习笔记--关于ARM中SWP指令的执行顺序问题【待验证】
- 关于折半查找的细节思考
- 关于ARM9和ARM7中都是PC=当前执行指令地址+8的解释