JMP指令的机器代码包括:
opcode - 11CCC010 (where CCC is the state of the flag bit used to set the condition) 8 bits
和
address
用于跳转 - 让我们说一个16位地址。
首先是操作码的提取操作,因此需要1个机器周期。检查标志位的状态。如果条件满足则读取地址,否则不是。 检查条件是否满足不应该采用任何有效的时钟周期,因为它是根据标志位的状态确定的。
我 - 现在如果条件满足:不。需要的机器周期= 1(用于获取)+ 2(用于读取16位的地址)= 3
II。如果条件不满足:应该没有读取周期(在获取周期之后),因此所需的机器周期数必须为1,即仅为获取周期。
但我所说的学习微处理器的材料说它需要2个机器周期,但不能说明原因,因此我的困惑。应该是1个机器周期还是2个机器周期?
如果对机器周期和时钟周期存在一些疑惑,请随时回答。
答案 0 :(得分:1)
虽然它与我们这些习惯于8080或z80的人相反,但检查this documentation证实了你的信念。如果条件不满足,则JC
需要两个机器周期和七个时钟周期,但如果满足条件则需要三个机器周期和十个时钟周期。与z80进行比较和对比,它始终是三个机器周期和十个时钟周期,无论是否采用。
然而,我认为你的困惑是因为你想象不读取地址有点自由,但仍有PC增加。
处理器系列的两个分支都具有基线双周期成本。这会解释和做出决定,因为它们已经流水线化,目标地址的第一个字节的读取将在其他地方开始。
在那一点上,我想象8085足够智能,如果分支不被采用,它可以拒绝读取目标地址的第二个字节,然后再次增加PC。 8080和z80可能允许第二个字节读取开始,并且很可能无法在不读取它的情况下递增PC,因此它们会依次执行,然后丢弃整个目标地址。
因此,简而言之:它不会等待决定开始读取目标地址;一旦读取低字节正在进行中,它就完成了。替代方案可能是一个指令,如果采用分支需要更长的时间,并且需要能够在不读取PC的情况下进行双倍增量,否则可能无法实现。
当然,所有猜测。有人有实际的8085和逻辑分析仪吗?他们可以检查是否发生了第一次访问周期,即使没有进行跳转。