我3年前学过处理器架构.
直到今天,我还无法弄清楚execute之前memory在顺序指令中找到的原因.
在执行指令时[ mov (%eax) %ebx],是否需要不访问内存?
谢谢!
让我们记住经典的RISC管道,通常会对其进行研究:http://en.wikipedia.org/wiki/Classic_RISC_pipeline.这是它的阶段:
在RISC中,您只能使用loads和stores来处理内存.而EX对于存储器访问指令阶段,将计算在内存中(以从寄存器文件地址,它的规模或增加偏移量)地址.然后地址将传递到MEM舞台.
您的示例mov (%eax), %ebx实际上是来自内存的负载,无需任何额外的计算,甚至可以在RISC管道中表示:
IF - 从指令存储器中获取指令ID - 解码指令,将"eax"寄存器作为操作数传递给ALU; 记住"ebx"作为WB的输出(在控制单元中);EX- 在ALU中计算"eax + 0"并将结果传递给下一阶段MEM(作为内存中的地址)MEM- 从EX舞台(从ALU)获取地址,转到内存并获取值(此阶段可能需要几个刻度才能通过阻塞管道来达到内存).传递价值WBWB- 从中获取值MEM并将其传递回寄存器文件.控制单元应将寄存器文件设置为模式:"写入"+"选择EBX"情况是在真正的CISC指令更复杂的,例如add (%eax), %ebx(载入字T从[%eax]存储器,然后存储T + %ebx到%ebx).该指令需要ALU中的地址计算和加法.这在最简单的RISC(MIPS)流水线中无法轻易表现出来.
第一个x86 cpu(8086)没有流水线,它在任何时候都只执行单个指令.但是自80386以来,有6个阶段的管道,这比RISC更复杂.有关其管道的介绍,将其与MIPS进行比较:http://www.academic.marist.edu/~jzbv/architecture/Projects/projects2004/INTEL%20X86%20PIPELINING.ppt
幻灯片17说:
mem和EX阶段,以避免负载和摊位,但并创建地址计算摊位在我的例子中,add将在MEM+EX多个CPU滴答的组合" "阶段执行,产生许多停顿.
现代x86 CPU具有非常长的流水线(典型的是16级),它们在内部是类似RISC的cpu.解码器阶段(3阶段或更多阶段)将大多数复杂的x86指令分解为一系列内部RISC类微操作(有时在微指令的帮助下生成每条指令最多450微操作;更典型的是2-3微操作).对于复杂的ALU/MEM操作,将有微操作用于地址计算,然后微操作用于存储器加载,然后微操作用于ALU操作.微操作将取决于它们,并计划到不同的执行端口.
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |