6502

问题描述

一个关于 6502 的快速而愚蠢的问题。例如,指令 nop 需要 2 个周期。如果6502发生了中断,能不能在nop的2个周期之间发生?

那么,这是一种可能的情况吗:

nop cycle 1
[ INTERRUPT ]
nop cycle 2

当然这个问题可以扩展到其他说明。中断会“等待”整个指令完成还是会中断指令本身?

解决方法

将评论整理为社区 Wiki:

当前指令finishes first:“当外围设备需要服务并将中断请求(IRQ)线拉低时,允许当前执行的机器语言指令完成,7时钟中断序列为启动。这个序列就像执行一条没有写入程序的指令,而是通过将 IRQ 线拉低到逻辑低电平这一事实隐式插入的。”

仅在指令的倒数第二个周期检查中断状态;因此,如果中断请求正在进行但中断禁用标志在序列之前设置:

CLI
SEI

然后会发生以下情况:

  • CLI 结束前一个周期,中断禁用标志仍然设置,因此 CLI 之后没有任何反应;
  • 在 SEI 结束前一个周期,中断禁用标志现在被禁用,因此安排了中断;
  • SEI 设置中断禁用标志;和
  • 然后响应中断请求,从而在堆栈上产生一个 P,并设置了中断禁用标志。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...