为什么在CALL的操作码获取中有6T状态而不是4?

时间:2015-11-21 05:15:12

标签: call 8085

我的问题是为什么在CALL指令的操作码获取中有6T状态,而在8085微处理器中有4个用于其他指令。我搜索了很多,但没有找到任何满意的答案。

这里:http://www.edaboard.com/thread201650.html它表示它与CALL情况下使用的双寻址模式有关。但并没有真正解释为什么6T表示。

有什么想法吗?

编辑

当我开始知道CALL需要18个T状态时,出现了这个问题。

根据我的计算,它应该是:4(对于操作码获取)+ 3 + 3(两个存储器读取以读取子程序地址)+ 3 + 3(对于堆栈上的两个存储器写入)= 16

因此,在搜索互联网时,我知道在CALL情况下操作码获取部分需要6T状态而不是4。

更新

现在,在阅读了评论并重新思考之后,我知道PUSH通常会将12个T状态作为指令。在CALL的情况下我们可以忽略PUSH的操作码获取部分,因为没有显式的PUSH指令,所以现在我们有8(12 - 4)。所以,我觉得是因为堆栈指针的减少?因为即使在推送中它应该是6(3 + 3用于存储器写入),但这里是8(4 + 4)。

2 个答案:

答案 0 :(得分:5)

6(操作码获取)+ 3 + 3(读取子程序地址的两次内存读取)+ 3 + 3(堆栈上的两次内存写入)= 18

所以我相信让你困惑的是操作码获取的6 T状态,而不是通常情况下的4 T状态.T状态用于获取操作码,就像在任何其他指令获取中一样。 2个T状态用于处理堆栈指针(SP)。因为在堆栈顶部没有存储任何内容。当遇到调用时,程序计数器的当前内容(写入调用的行的地址)被推送到堆栈。执行完成后,必须放回堆栈的内容。因此,调用需要两个额外的状态而不是其他指令提取。

答案 1 :(得分:2)

4个T状态用于获取操作码; 2个T状态用于递减堆栈指针(SP)。因为在堆栈顶部没有存储任何内容。