第七章 关于中断
CPU收到中断后 会在中断描述符表中通过中断向量号进行索引(提前为每一种中断分配好中断向量号) 中断向量号通过INTR或NMI引脚传入CPU
中断发生时的压栈
1根据CPL和DPL判断是否发生特权级的变换,将SS_old(用0扩张为16位)和ESP_old压入栈
2压入EFLAGS寄存器
3将CS_old 和 EIP_old 压入栈,中断程序执行结束后才能退回原来的程序
4压入错误码(iret时必须手动跳过)
中断处理框架:
(1) 构造好IDT
(2) 提供中断向量号
8259A内的两组寄存器: ICW (初始化命令字)+ OCW (操作命令字)
ICW1 : 0 0 0 1 LTIM(中断检测方式) ADI(8085的时间间隔) SNGL(单片或级联) IC4(是否需要ICW4)
ICW2: T7 T6 T5 T4 T3 ID2 ID1 ID0 (只需要填写T3~T7)
ICW3: (仅在ICW的SNGL = 1 的情况下)
主片: S7 S6 S5 S4 S3 S2 S1 S0
从片: 0 0 0 0 0 ID2 ID1 ID0 (第三位来指定和主片相连的接口)
ICW4: 0 0 0 SFNM BUF M/S AEOI μPM
OCW1:M7~M0 (对应 IRQ0 ~ IRQ7) IMR屏蔽中断
OCW2:写入到主片的0x20和从片的)0xA0端口