我听说cpu只是从EIP
寄存器获取指令,而不是直接从内存中取出。
但AFAIK,EIP
只存储下一条指令的地址,指令本身仍在内存中。如果CPU从不提取内存,怎么知道下一条指令是什么实际上是?
更新
顺便说一句,我知道有x86,x64,x87架构,但x86-64
属于x86
或x64
??
答案 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]