Y86-64指令执行组织成阶段

通常,处理一条指令包括多个操作。将它们组织成某个特殊的阶段序列,即使指令的动作差异很大,但所有指令都遵循统一的序列。每一步的具体处理取决于正在执行的指令。

一条指令的处理可以划分为以下六个阶段:

  1. 取指(fetch):取指阶段从内存读取指令字节,地址为程序计数器(PC)的值。从指令中抽取出指令指示符字节的两个四位部分,称为icode(指令代码)和ifun(指令功能)。它可能取出一个寄存器指示符字节,表明一个或两个寄存器操作数指示符rA和rB。还可能取出一个8字节的常数valC。
  2. 译码(decode):译码阶段从寄存器文件读入最多两个操作数,得到valA或(和)valB。通常读入指令rA和rB字段指明的寄存器。
  3. 执行(execute):在执行阶段,算术/逻辑单元要么执行指令指明的操作(根据ifun的值),计算内存引用的有效地址,有么增加或减少栈指针。得到的值称为valE。也可能设置条件码。
  4. 访存(memory):访存阶段可以将数据写入内存,或者从内存读出数据。读出的值为valM。
  5. 写回(write back):协会阶段最多可以写回两个结果到寄存器文件。
  6. 更新PC(PC update):将PC设置成下一条指令的地址。

OPq rA,rB 的执行阶段:

阶段操作
取指 i c o d e : i f u n ← M 1 [ P C ] icode:ifun\leftarrow M_1[PC] icode:ifunM1[PC] r A : r B ← M 1 [ P C + 1 ] rA:rB\leftarrow M_1[PC+1] rA:rBM1[PC+1] v a l P ← P C + 2 valP \leftarrow PC+2 valPPC+2
译码 v a l A ← R [ r A ] valA \leftarrow R[rA] valAR[rA] v a l B ← R [ r B ] valB \leftarrow R[rB] valBR[rB]
执行 v a l E ← v a l B O P v a l A valE \leftarrow valB \quad OP \quad valA valEvalBOPvalA
访存 N o n e None None
写回 R [ r B ] ← v a l E R[rB] \leftarrow valE R[rB]valE
更新PC P C ← v a l P PC \leftarrow valP PCvalP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值