MIPS处理器 指令执行过程

本文详细介绍了计算机指令执行的四个主要阶段:取指(IF)、指令译码和读取寄存器(ID)、指令执行(EX)及存储器访问或R型指令完成(WB&MEM)阶段。在这些阶段中,控制器通过不同的控制信号来实现指令的读取、译码、执行及结果写回等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

https://blog.csdn.net/weixin_45792450/article/details/109314693


指令执行阶段

单个时钟周期内执行单个阶段,指令执行有序执行

执行数据通路

注:上述图中ALUOp=01应该为:ALU执行减法

执行过程解析

取指-IF阶段

主要任务:从内存中取出指令,并计算下一条指令的地址

从内存取出指令:控制器设置控制信号MemRead和IRWrite有效,将IorD置0以选择PC作为内存地址来源

计算下一条地址:控制器置控制信号ALUSrcA为0,ALUSrcB为01,ALUOp为00(加法运算),ALU实现计算PC+4,置PCSrc为00,下一条指令地址成功存入PC

指令译码和读取寄存器-ID阶段

主要任务:翻译指令和准备数据,IF和ID阶段均不知道指令内容

由于指令没有具体翻译出来,具体执行何种指令是未知的,此时我们需要多做一些准备,以应对可能需求,尽管可能有些步骤在某些指令看来是多余的,但所幸没有坏处。

读取寄存器:读取寄存器Rs和Rt,并分别存入寄存器A和B

如果是分支指令,下一周期可能还要用到PC的地址,故需要提前准备

准备偏移地址:控制器置ALUSrcA=0,ALUSrcB=11,ALUOp=00(加法运算),这样偏移地址就计算出来,并存入寄存器ALUOut了

指令执行,存储地址计算或者分支完成-EX阶段

主要任务:完成具体的指令操作或者准备具体的指令数据

访存指令:控制器置ALUSrcA=1,ALUSrcB=10,ALUOp=00,ALU将操作数相加,得到存储地址,存入ALUOut

此处考虑R型的运算指令,立即数型的运算指令对比之下不难实现。

运算指令:控制器置ALUSrc=1,ALUSrcB=00,ALUOp=10,完成算术运算,结果存入ALUOut

分支指令:控制器置ALUSrcA=1,ALUSrcB=00,ALUOp=01,以进行等值测试;置PCWriteCond=1,PCSrc=01,若ALU的零输出为1,与PCWriteCond做与运算得1,最后写入运算后的PC值,否则不做任何处理。

跳转指令:控制器置PCSrc=10,PCWrite=1,通过一个或门后将跳转地址送入PC

存储器访问或R型指令完成-WB阶段&MeM阶段

这个阶段的R型指令会将结果写回寄存器,对访存指令来说将进行访存操作

运算指令:控制器置RegDst=1,RegWrite=1,MemtoReg=0,向寄存器Rd存入计算结果

访存指令:若为取字指令,则从内存读出数据,并写入MDR;若为存字指令,则直接将数据写入内存。控制器置MemRead或MemWrite=1,IorD=1,实现数据直接存入内存或者从内存取数据到MDR。

取字指令的尾声:这一步将MDR的数据写入对应寄存器。控制器置MemtoReg=1,RegWrite=1,RegDst=0,实现寄存器数据的写入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦星辰.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值