流水线每一个功能段部件后面都要有一个缓冲寄存器,或称为锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。
①IF取指
②ID译码&取数
③EX 执行
④M访存
⑤WB写回寄存器
运算类指令、LOAD指令、STORE指令、条件转移指令、无条件转移指令
下面我们对这五个指令进行介绍
运算类指令举例 | 指令的汇编格式 | 功能 |
---|---|---|
加法指令(两个寄存器相加): | ADD Rs,Rd | (Rs)+(Rd) → Rd |
加法指令(寄存器与立即数相加): | ADD #996,Rd | 996+(Rd) → Rd |
算数左移指令: | SHL Rd | (Rd)<<<2 → Rd |
指令的汇编格式 | 功能 |
---|---|
LOAD Rd,996(Rs) | (996+(Rs))→Rd |
或简写为:LOAD Rd,mem | (mem)→Rd |
通常,RISC处理器只有“取数LOAD”和“存数STORE”指令才能访问主存
指令的汇编格式 | 功能 |
---|---|
STORE Rs,996(Rd) | Rs → (996+(Rd)) |
或简写为:STORE Rs,mem | Rs → (mem) |
指令的汇编格式 | 功能 |
---|---|
beq Rs, Rt, #偏移量 | 若(Rs)==(Rt),则(PC)+指令字长+(偏移量×指令字长)→PC;否则(PC)+指令字长→PC |
bne Rs, Rt, #偏移量 | 若(Rs)!=(Rt),则(PC)+指令字长+(偏移量×指令字长)→PC;否则(PC)+指令字长→PC |
注:通常在IF段结束止之后PC就会自动 +“1”
指令的汇编格式 | 功能 |
---|---|
jmp #偏移量 | (PC)+指令字长+(偏移量×指令字长)àPC |
例题.假设某指令流水线采用“按序发射,按序完成”方式,没有采用转发技术处理数据相关,并且同一寄存器的读和写操作不能在同一个时钟周期内进行。若高级语言程序中某赋值语句为x=a+b,x、a和b均为int型变量,它们的存储单元地址分别表示为[x]、[a]和[b]。该语句对应的指令序列及其在指令流中的执行过程如下图所示。
则这4条指令执行过程中I3的ID段和I4的IF段被阻塞的原因各是什么?
I3与I1和I2存在数据相关;
I4的IF段必须在I3进入ID段后才能开始,否则会覆盖IF段锁存器的内容
只有上一条指令进入ID段后,下一条指令才能开始IF段,否则会覆盖IF段锁存器的内容
联系客服