CPU是否永远不会直接从内存中取出任何内容?

时间:2011-03-30 12:09:22

标签: cpu-architecture cpu-registers

我听说cpu只是从EIP寄存器获取指令,而不是直接从内存中取出。

但AFAIK,EIP只存储下一条指令的地址,指令本身仍在内存中。如果CPU从不提取内存,怎么知道下一条指令是什么实际上是?

更新

顺便说一句,我知道有x86,x64,x87架构,但x86-64属于x86x64 ??

4 个答案:

答案 0 :(得分:1)

你问题的简单答案是“不,这不是真的”。

由于缓存,指令流水线,分支预测等原因,图片不是很简单。但是,指令指针就是指针。它不存储操作码。

答案 1 :(得分:1)

EIP(扩展指令指针)应该保存指令的地址。这只是一种方法,可以保留当前正在处理哪条指令的选项卡(或者有时候,下一步处理哪条指令)。

指令本身存储在内存(HDD,RAM,Cache)中,需要由CPU提取。

也许您所听到的意思是,由于通常使用如此多级别的缓存,因此获取需要访问RAM非常罕见..

答案 2 :(得分:1)

好吧,我不知道你问题的重点。

是的CPU(从广义上讲)确实是从内存中获取的。它有许多内存管理设备(用于缓存行处理和流水线操作)。事实上,'管道'将指令放在L1缓存中。实际上,指令处理器本身只从那里取出。实际上处理器甚至可能从未查看EIP(除非指令直接将其用作操作数)。

所以真正的答案是,找到一个关于i86处理器设计的维基百科,并有一个球。你将能够准确地知道在哪里发生了什么。

干杯

答案 3 :(得分:0)

以这种方式不正确。 CPU通过缓存访问内存,因此您可以说它不直接执行。 (此外,DMA cahnnel可以在不触及CPU的情况下在内存和IO之间传输数据。)

是的,CS:EIP指向内存,指向要执行的下一条指令,但您也可以使用直接地址(将地址0x0800的内容加载到AX寄存器,默认情况下这是相对于DS段的):

MOV AX,[0x0800]