Y86-64的顺序实现
跟踪irmovq指令的执行
一条指令的执行过程通常可以分为取指->译码->执行->访存->写回->更新PC,下面以irmovq指令为例,详细的解释这条指令的执行过程。
阶段 | 通用 | 具体 |
---|---|---|
irmovq V,rB | irmovq $128,%rsp | |
取指 | icode:ifun<-M1[PC] rA:rB<-M1[PC+1] valC<-M8[PC+2] valP<-PC+10 | M1[0x016]=3:0 M1[0x015]=f:4 valC<-M1[0x018]=128 valP<-0x020 |
译码 | ||
执行 | valE<-0+valC | valE<-128 |
访存 | ||
写回 | R[rB]<-valE | R[rB]<-128 |
更新PC | PC<-valP | PC<-0x20 |
其余的还有其他指令,比如ret、popq、rmmovq,它们的执行过程其实也都是遵循通用规则的。
SEQ的时序
要控制处理器中活动的时序,只需要寄存器和内存的时钟控制。通过时钟周期来控制元素的更新,通过组合逻辑来传播,每次时钟周期由低到高时,处理器开始执行一条新指令。处理器从来不需要为了完成一条指令的执行而去读该指令更新了的状态。
SEQ阶段的实现
一条指令在顺序的处理器中执行一般来说需要五个阶段,需要根据不同的指令取出其所需要的数据,可以使用HCL来描述这个过程。SEQ执行只有当上一个阶段执行完才会执行下一个阶段,这样就会导致运行的很慢,而且不能充分利用硬件单元,在接下来会学习流水线化的运行原理。