Assembly 单个8080指令中的时钟周期

Assembly 单个8080指令中的时钟周期,assembly,cpu-architecture,instruction-set,intel-8080,Assembly,Cpu Architecture,Instruction Set,Intel 8080,从图书代码中可以看出: 8080指令需要4到18个时钟周期” 为什么执行一条指令的时钟周期数会有如此大的波动。执行如此长时间的指令的例子是什么?例如,汇编指令这会占用那么多的周期吗?对于这些较旧的处理器,您通常只需查看指令并自己计算时钟周期。不要感到困惑,因为现代处理器在一个时钟中执行指令的形状和形式都不相同,它需要很多个时钟,数量也不尽相同,它只是流水线式的,因此您有了错觉n这是一个时钟,用于长时间的非分支代码。当你观察汽车生产设施的外部时,如果一辆汽车每5分钟生产一次,这并不意味着制造一辆汽

从图书代码中可以看出:

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


为什么执行一条指令的时钟周期数会有如此大的波动。执行如此长时间的指令的例子是什么?例如,汇编指令这会占用那么多的周期吗?

对于这些较旧的处理器,您通常只需查看指令并自己计算时钟周期。不要感到困惑,因为现代处理器在一个时钟中执行指令的形状和形式都不相同,它需要很多个时钟,数量也不尽相同,它只是流水线式的,因此您有了错觉n这是一个时钟,用于长时间的非分支代码。当你观察汽车生产设施的外部时,如果一辆汽车每5分钟生产一次,这并不意味着制造一辆汽车需要5分钟,而有些生产出来时有两扇门,有些生产出来时有四扇门。制造一辆汽车可能需要一个小时,他们只需要每5分钟启动一辆新的并每五分钟完成一次,生产线的速度保持不变。这并不意味着每个工位必须在五分钟内完成它们的工作,你可能需要一个10分钟的步骤,你只需要将该步骤并行化,以便所有车辆平均进出5分钟。现代处理器中的乘法运算可以在n一个时钟具有指数级的逻辑量,在两个时钟中执行,它要小得多,四个,比这个小得多,因此一些时钟将在多个时钟中执行,并且有空闲状态等待乘法器完成

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

但也许这是一个GPR加上一个内存位置(CISC),其结果会传到内存位置。因此,一个时钟获取内存位置值,一个时钟进行加法,一个时钟将其写回

我对6502比8080更熟悉,6502文档的时钟计数非常明显

如果为零,您可能会有一个比较和分支,如果进行了分支,规范可能会说添加一个时钟。如果您没有分支,那么该额外时钟就是分支目标上下一条指令的获取,而下一条指令已经获取

在CISC中,每个指令可以有许多步骤,只需仔细考虑基本步骤,并考虑哪些步骤可以/可能在同一时钟内完成,哪些步骤可能是/不是。RISC对某些指令也有步骤,其目的是减少这些步骤,使每一条指令都不那么复杂,更易于实现,更快,并且您可以组合安排指令以执行相同的总体任务。将常量放入gpr,从内存读取,从gpr读取,将读取的两个值相加,将结果存储在gpr中,将gpr值存储到内存中


只需将其分解为单独的步骤,这将使您有很长的路要走,但同时具体的实现可能会有所不同。在某些情况下,您可以执行alu操作并将结果存储在同一个时钟中,而在另一些情况下,存储/写回可能需要单独的时钟。您是否考虑了一些具体的说明?

除法和乘法ion通常需要很长时间。它在所有现代x86 CPU中都会波动。例如,Intel Silvermont中的64位除法在VIA nano 3000中需要47-107个周期和182-200个周期。您可以检查x86 CPU的延迟和吞吐量,因为它是一个具有可变长度指令的微码CISC,因此存在一些变化并不奇怪s、 显示计时。较慢的是从16位绝对地址加载的16位数据:与单字节指令相比,8位CPU需要4次额外的内存访问。更慢的是必须分支(并重新启动指令提取)的调用a16顺便说一句,这可能会更好地在上接收-我们不再以这种方式构建微代码化的CPU。