单个 8080 指令中的时钟周期
Clock cycles in a single 8080 instruction
从代码书中,它说:
The 8080 instruction requires anywhere from 4 to 18 clock cycles".
为什么执行一条指令的时钟周期数之间会有这样的波动。执行需要很长时间的指令的示例是什么?即,汇编指令是否需要那么多周期?
对于这些较旧的处理器,您通常只需查看指令并自己计算时钟周期即可。并且不要混淆,因为现代处理器绝不会在一个时钟内形成或形式执行指令,它需要很多时间并且数量会变化,它只是流水线化,这样你就会产生一种错觉,即它是一个时钟用于长时间的非分支代码。当您观察汽车生产设施的外部时,如果每 5 分钟生产一辆汽车,这并不意味着制造汽车需要 5 分钟,有些汽车有两扇门,有些有四扇。制造一辆车可能需要一个小时,他们只是每五分钟开始一辆新车,每五分钟完成一辆,并且生产线可以保持速度。这并不意味着每个站点都必须在五分钟内完成他们的工作,您可能有一个 10 分钟的步骤,您只需要并行化该步骤,以便所有车辆平均进出 5 分钟。现代处理器中的乘法可以在一个时钟内完成,逻辑数量呈指数级增长,在两个时钟内完成,而且它要少得多,四个,比那个少得多,所以有些会在多个时钟内完成,并且有空闲状态等待乘法器完成。
因此,也许您有一条单字节指令,表示将一些 gpr 添加到累加器。所以你可能需要一个时钟来获取 gpr,一个时钟来做添加。也许单字节指令的提取是预取的,所以是免费赠品。
但也许它添加了一个带有内存位置 (CISC) 的 GPR,结果转到了内存位置。因此,一个时钟用于获取内存位置值,一个时钟用于添加,一个时钟用于将其写回。
我对 6502 比 8080 更熟悉,6502 文档的时钟计数非常明显。
如果为零,您可能有一个比较和分支,并且规范可能会说如果采用分支则添加一个时钟。那个额外的时钟是在分支目的地提取下一条指令,如果你没有分支,下一条指令已经被提取了。
使用 CISC,每条指令可以有多个步骤,只需考虑基本步骤并考虑哪些 can/might 在同一时钟内完成,哪些可能 are/were 不. RISC 对一些指令也有步骤,其想法是减少它,使每条指令不那么复杂,更容易实现,速度更快,你可以组合指令来执行相同的整体任务。将常量放入 gpr 中,从内存中读取,从 gpr 中读取,将读取的两个值相加,将结果存储在 gpr 中,将 gpr 值存储到内存中。
只需将其分解成单独的步骤,这会让您走得更远,但同时具体的实施可能会有所不同。在某些情况下,您可以执行 alu 操作并将结果存储在同一个时钟中,而在其他情况下 store/writeback 可能需要一个单独的时钟。您是否有一些具体的说明?
从代码书中,它说:
The 8080 instruction requires anywhere from 4 to 18 clock cycles".
为什么执行一条指令的时钟周期数之间会有这样的波动。执行需要很长时间的指令的示例是什么?即,汇编指令是否需要那么多周期?
对于这些较旧的处理器,您通常只需查看指令并自己计算时钟周期即可。并且不要混淆,因为现代处理器绝不会在一个时钟内形成或形式执行指令,它需要很多时间并且数量会变化,它只是流水线化,这样你就会产生一种错觉,即它是一个时钟用于长时间的非分支代码。当您观察汽车生产设施的外部时,如果每 5 分钟生产一辆汽车,这并不意味着制造汽车需要 5 分钟,有些汽车有两扇门,有些有四扇。制造一辆车可能需要一个小时,他们只是每五分钟开始一辆新车,每五分钟完成一辆,并且生产线可以保持速度。这并不意味着每个站点都必须在五分钟内完成他们的工作,您可能有一个 10 分钟的步骤,您只需要并行化该步骤,以便所有车辆平均进出 5 分钟。现代处理器中的乘法可以在一个时钟内完成,逻辑数量呈指数级增长,在两个时钟内完成,而且它要少得多,四个,比那个少得多,所以有些会在多个时钟内完成,并且有空闲状态等待乘法器完成。
因此,也许您有一条单字节指令,表示将一些 gpr 添加到累加器。所以你可能需要一个时钟来获取 gpr,一个时钟来做添加。也许单字节指令的提取是预取的,所以是免费赠品。
但也许它添加了一个带有内存位置 (CISC) 的 GPR,结果转到了内存位置。因此,一个时钟用于获取内存位置值,一个时钟用于添加,一个时钟用于将其写回。
我对 6502 比 8080 更熟悉,6502 文档的时钟计数非常明显。
如果为零,您可能有一个比较和分支,并且规范可能会说如果采用分支则添加一个时钟。那个额外的时钟是在分支目的地提取下一条指令,如果你没有分支,下一条指令已经被提取了。
使用 CISC,每条指令可以有多个步骤,只需考虑基本步骤并考虑哪些 can/might 在同一时钟内完成,哪些可能 are/were 不. RISC 对一些指令也有步骤,其想法是减少它,使每条指令不那么复杂,更容易实现,速度更快,你可以组合指令来执行相同的整体任务。将常量放入 gpr 中,从内存中读取,从 gpr 中读取,将读取的两个值相加,将结果存储在 gpr 中,将 gpr 值存储到内存中。
只需将其分解成单独的步骤,这会让您走得更远,但同时具体的实施可能会有所不同。在某些情况下,您可以执行 alu 操作并将结果存储在同一个时钟中,而在其他情况下 store/writeback 可能需要一个单独的时钟。您是否有一些具体的说明?