有效地址计算时间为8086/8088

时间:2015-04-24 08:42:05

标签: assembly x86 x86-16 cpu-architecture

我已经开始实施8086/8088,目标是完全循环。我可以理解大多数指令的时钟周期数背后的原因,但我必须说我对有效地址(EA)计算时间感到困惑。

更具体地说,为什么计算BP + DI或BX + SI需要7个周期,但计算BP + SI或BX + DI需要8个周期?

我可以等待一定数量的周期,但我真的很想知道为什么存在这种1周期差异(以及为什么需要这么多周期才能进行任何EA计算,因为EA使用ALU来实现计算地址,寄存器之间的ADD只有3个周期。)

1 个答案:

答案 0 :(得分:4)

如果不对芯片进行逆向工程,我认为不可能解释[BP + SI]和[BP + DI]之间的周期差异。 (请注意,有人已完成或将完成必要的逆向工程并不是完全不可能的,已经为Commodore 64中的一些芯片完成了以创建更精确的仿真器。)但是它很容易解释为什么有效地址计算一般需要这么长时间。原因是[BX + SI]的计算实际上是DS * 16 + BX + SI,所以它是两个加,而不仅仅是一个。它也是一个20位计算,ALU只有16位宽,因此需要多一次加法来计算物理地址的高20位。这是等效的三个寄存器寄存器增加了总共9个周期,并假设4位移位是免费的,因此EA计算实际上比等效指令快。