我的问题是为什么在CALL指令的操作码获取中有6T状态,而在8085微处理器中有4个用于其他指令.我搜索了很多,但没有找到任何满意的答案.
这里:http://www.edaboard.com/thread201650.html它说它与CALL情况下使用的双寻址模式有关.但并没有真正解释为什么6T表示.
任何的想法?
编辑
当我开始知道CALL需要18个T状态时,就出现了这个问题.
根据我的计算,它应该是:4(对于操作码获取)+ 3 + 3(两个存储器读取以读取子程序地址)+ 3 + 3(对于堆栈上的两个存储器写入)= 16
因此,在搜索互联网时,我知道在CALL情况下操作码获取部分需要6T状态而不是4.
UPDATE
在阅读了评论并重新思考之后,我开始知道PUSH通常会将12个T状态作为指令.在CALL的情况下我们可以忽略PUSH的操作码获取部分,因为没有显式的PUSH指令,所以现在我们有8(12 - 4).所以,我觉得是因为堆栈指针的减少?因为即使在推送中它应该是6(3 + 3用于存储器写入),但在这里它是8(4 + 4).
6(操作码获取)+ 3 + 3(读取子程序地址的两次存储器读取)+ 3 + 3(堆栈上的两次存储器写入)= 18
因此,我认为令人困惑的是操作码获取的6 T状态而不是通常情况下的4 T状态.T状态用于获取操作码,就像在任何其他指令获取中一样.2个T状态用于处理堆栈指针(SP).因为在堆栈顶部没有存储任何内容.当遇到调用时,程序计数器的当前内容(写入调用的行的地址)被推送到堆栈.执行完成后,必须放回堆栈的内容.因此,该调用需要比其他指令提取更多的两个状态.