关于中断周期 FGI 和 FGO 触发器条件的问题 - 基本计算机组织和设计

A question about Interrupt cycle FGI and FGO flipflops conditions - Basic Computer Organization and design

计算机系统体系结构 - Morris Mano 第 5 章第 7 节图 5-13

当IEN检查“FGI”或“FGO”是否设置为1时,会发生中断循环,但据我所知,当FGI = 1时,这意味着INPR中的信息不能更改,而FGO是相反,这意味着当 FGO 设置为 1 时,AC 中的信息将被传输到 OUTR 'OUTR can be changed' 所以这里的问题 当“FGI” = 0 或“FGO”= 1,因为在这些条件下可以更改 INPR 或 OUTR,现在执行中断?

任一标志为 1 在逻辑上都意味着设备“就绪”,但“就绪”对于输入和输出设备的含义不同。在任何一种情况下,标志为 1 都意味着处理器现在可以或应该采取行动。

FGI=1 意味着输入设备准备就绪,但这实际上意味着新的输入可用(例如,用户在键盘上键入了一个键)并且处理器应该接受它。 FGO=1 防止输入设备覆盖 INPR 中保存的处理器尚未接受的先前输入。当处理器接受输入时,FGI 变为 0 解锁 INPR 寄存器,这允许输入设备再次写入,当用户按下另一个键时它最终会这样做(将 FGI 发送回 1 以向处理器发出信号)。

FGO=1表示ready for output,意思是最后的输出已经完全被设备接受,所以OUTR寄存器被解锁,处理器可以写入新的数据(控制台字符)。 FGO=0 阻止处理器写入 OUTR,因为输出设备尚未接受最后一个。

中断服务例程应检查每个标志,如果 FGI=1,则接受输入 (INPR->AC) 并将其移入缓冲区供用户程序在准备就绪时读取。而如果 FGO=1,则将一个输出字符从内存缓冲区移动到 AC,然后执行 AC->OUTR,同时将 FGO 降低到 0,这将阻止处理器写入,直到该数据被设备接受。

所以,FGI=0表示处理器已经接受了输入设备提供的先前INPR值,目前还没有新的字符,但是寄存器已经解锁,设备可以随意写入。

FGO=0 表示处理器已将值写入 OUTR 寄存器,但输出设备尚未接受该值,因此应认为该寄存器已锁定。