Assembly 从x86中的寄存器加载值所用的时间

Assembly 从x86中的寄存器加载值所用的时间,assembly,x86,cpu-registers,mov,Assembly,X86,Cpu Registers,Mov,我目前正在从《英特尔x86汇编的艺术》一书中学习x86。在详细说明不同指令类和操作码如何工作的部分中,说明了单字节操作码的编码方式类似于iirrmmm,其中三个is表示指令类,rr表示4个主寄存器,而mmm可以是许多表示可选2字节内存操作数的值,其形式为AX,[AX],[AX+XXXX]等。例如,101对应于[XXXX+BX],100对应于[BX],它还提到,首先,访问寄存器中的值所需的时间是零时钟周期,因为它是在芯片上实现的 但是,在解释指令完全工作所需的时间时,为了计算CPU计算内存操作数地

我目前正在从《英特尔x86汇编的艺术》一书中学习x86。在详细说明不同指令类和操作码如何工作的部分中,说明了单字节操作码的编码方式类似于
iirrmmm
,其中三个
i
s表示指令类,
rr
表示4个主寄存器,而
mmm
可以是许多表示可选2字节内存操作数的值,其形式为
AX
[AX]
[AX+XXXX]
等。例如,
101
对应于
[XXXX+BX]
100
对应于
[BX]
,它还提到,首先,访问寄存器中的值所需的时间是零时钟周期,因为它是在芯片上实现的

但是,在解释指令完全工作所需的时间时,为了计算CPU计算内存操作数地址所需的时间,它说:


它不是分别是1和0个周期吗,因为这本书在开头清楚地提到,零时钟周期用于访问寄存器中的值?为什么说取1个周期来访问
BX
中的值?

寄存器操作数的零周期意味着仅寄存器操作的延迟是操作的基线(寄存器与ALU有快速连接)。使用内存操作数时,内存访问延迟将添加到操作延迟中。
内存访问延迟的一部分是地址计算。包含地址的寄存器(或在复杂寻址模式下的部分地址)必须路由到CPU的寻址单元,而不是其ALU
然后,该地址被用于访问内存,此时CPU中的路由是花费零个周期还是一个周期的问题变得荒谬:内存延迟可以大几个数量级

底线:没有人关心这个周期。

寄存器操作数的零周期意味着仅寄存器操作的延迟是该操作的基线(寄存器与ALU有快速连接)。使用内存操作数时,内存访问延迟将添加到操作延迟中。
内存访问延迟的一部分是地址计算。包含地址的寄存器(或在复杂寻址模式下的部分地址)必须路由到CPU的寻址单元,而不是其ALU
然后,该地址被用于访问内存,此时CPU中的路由是花费零个周期还是一个周期的问题变得荒谬:内存延迟可以大几个数量级

一句话:没有人关心这个周期。

其他人指出,你正在读的书已经很老了,所以它告诉你的关于教学时间安排的内容在今天并不重要。关于“记忆周期”和“时钟周期”是等价的,尤其是这本书可以追溯到80年代初

一条指令执行所需的时钟周期取决于指令触发的数据依赖性,以及CPU指令集设计者关注优化指令解码和执行的机器数量

更老的机器会使用许多时钟来获取和解码复杂的指令,然后通常使用几个时钟来访问内存(在80年代后期,时钟频率为10 Mhz)。需要解码的大量时钟是由复杂的指令集设计、指令解码时缺少大量资源(空间和晶体管)以及通过更大的硅几何体的长延迟造成的。存储器的访问时间为70纳秒,因此只需要几个时钟(例如10个),因为时钟周期要慢得多

由于实现比现代CPU简单得多,CPU内部通常有一个直接的有限状态机来控制指令执行。通过大致了解这个FSA是如何工作的,您可以预测指令解码时间,包括解码内存寻址的时间,正如您的书所建议的那样。不再是真的

现代机器的时钟频率非常高:2-4GHz。这是1000倍的速度。这是可能的,因为晶体管要小得多,因此电流穿过晶体管所需的时间更少。此外,有了这么多晶体管,设计者可以在解码/执行和缓存方面投入大量额外的硅。奇怪的是,记忆的速度并没有快很多,所以访问时钟中的记忆所需的相对时间却惊人地增加了。40纳秒存储器需要160个4Ghz时钟

可以说,芯片可以解码一条指令,并将执行该指令所需的一切信息存储在缓存中(现代英特尔CPU主要用于复杂指令)。这意味着一条复杂指令在第一次遇到时可能需要几十个周期来解码,而在再次遇到时可能需要一个时钟(“在解码指令缓存中查找”),这是经常发生的(考虑循环)。好消息是平均指令解码时间非常短;坏消息是,您无法准确估计一条指令解码和运行所需的时间,因为这取决于所涉及的优化和缓存数量,以及特定指令执行时是否命中缓存,还有哪些指令仍在处理中,并且由于数据依赖关系而具有资源访问的优先权

实际上,晶体管仍然(数量巨大但)有限,因此指令解码器不能缓存所有的东西。设计师们仍在权衡。一个关键的折衷是,“简单”(RISC)指令(往往执行很多次)分配了大量资源,使它们能够在每次遇到时快速解码,而复杂指令(往往执行频率较低)得到的硬件资源更少

具体到解码需要多长时间