-2

从书中代码,它说:

8080 指令需要 4 到 18 个时钟周期”。

为什么执行一条指令的时钟周期数之间会有这样的波动。什么是需要很长时间才能执行的指令的示例?即,汇编指令会需要那么多周期吗?

4

1 回答 1

1

使用这些较旧的处理器,您通常可以只查看指令并自己计算时钟周期。并且不要混淆,因为现代处理器绝不会在一个时钟内执行指令,它需要很多时间并且数量会有所不同,它只是流水线式的,因此您会产生一种错觉,即它是一个时钟用于长时间的非分支代码。当您查看汽车生产设施的外部时,如果每 5 分钟生产一辆汽车,这并不意味着制造一辆汽车需要 5 分钟,有些生产有两扇门,有些生产有四扇门。制造一辆汽车可能需要一个小时,他们只是每五分钟开始一辆新的,每五分钟完成一辆,而且生产线的速度保持不变。这并不意味着每个站都必须在五分钟内完成他们的工作,您可能有一个 10 分钟的步骤,您只需要并行化该步骤,以便所有车辆平均进出 5 分钟。现代处理器中的乘法可以在一个具有指数逻辑量的时钟中完成,在两个时钟中完成,它比那个少得多,四,比那个少得多,所以有些人会在多个时钟中完成,并且有空闲状态等待乘法器完成。

所以也许你有一个单字节指令,上面写着向累加器添加一些 gpr。所以你可能需要一个时钟来获取 gpr,一个来做加法。也许单字节指令的提取是预取的,所以是免费的。

但也许它添加了一个带有内存位置 (CISC) 的 GPR,其结果将发送到内存位置。所以一个时钟来获取内存位置值,一个时钟来做加法,一个时钟来写回它。

我更熟悉说 6502 比 8080 和 6502 文档的时钟计数非常明显。

如果为零,您可能会有比较和分支,如果采用分支,规范可能会说添加一个时钟。那个额外的时钟是在分支目的地获取下一条指令,如果你没有分支,下一条指令已经被提取了。

使用 CISC,您可以在每条指令中执行多个步骤,只需考虑基本步骤,并考虑哪些可以/可能在同一时钟内完成,哪些可能是/不是。RISC也有一些指令的步骤,想法是减少它,使每条指令更简单,更容易实现,更快,你可以组合指令来执行相同的整体任务。将一个常量放入 gpr,从内存中读取,从 gpr 中读取,将读取的两个值相加,将结果存储在 gpr 中,将 gpr 值存储到内存中。

只需将其分解为单独的步骤,这将使您走得更远,但同时具体的实施可能会有所不同。在某些情况下,您可以执行 alu 操作并将结果存储在同一时钟中,而在其他情况下,存储/写回可能需要单独的时钟。你有什么具体的指示吗?

于 2020-04-08T06:07:34.160 回答