外部硬件中断:处理器接两根线NMI传输非屏蔽中断(即无法屏蔽的中断)和INTR传输可屏蔽中断

IR0到IR7优先级依次降低

处理器中中断标志位起决定作用,IF为0时屏蔽所有INTR引脚来的信号都被屏蔽


BIOS创建中断向量表

实时时钟和CMOS RAM
CMOS RAM中的日期和时间通常使用二进制形式的十进制编码(BCD)来表示

实时时钟RTC电路可以发出的中断信号类型:
- 周期性中断信号
- 更新周期结束中断
- 闹钟中断
周期性中断信号
以固定周期进行中断

寄存器A指定时基和速率

寄存器B控制周期性中断是否运行

更新周期结束中断
更新周期:每隔一秒更新时间、检查数据有效性、检查闹钟、写回更新的数据



闹钟中断

实时时钟发出的中断信号的类型判断:
寄存器C只读,读取后自动清零

程序中修改SS寄存器和修改SP寄存器的指令必须相邻,否则可能会在中间发生中断导致栈错误
安装中断处理过程

SECTION code align=16 vstart=0 ;定义代码段(16字节对齐)
new_int_0x70:
...
iret
...
start:
mov ax,[stack_segment]
mov ss,ax
mov sp,ss_pointer
mov ax,[data_segment]
mov ds,ax
mov al,0x70 ; 中断号0x70
mov bl,4
mul bl ; 中断号乘4得到中断向量表IVT中对应中断的入口地址所在的地址
mov bx,ax
cli ; 关中断,防止中断发生
push es
mov ax,0x0000 ; IVT所在段的地址
mov es,ax
mov word [es:bx],new_int_0x70 ;写入自定义的中断处理过程的偏移地址
mov word [es:bx+2],cs ;写入自定义的中断处理过程的段地址
pop es
启用更新周期结束中断

mov al,0x0b ; RTC寄存器B
or al,0x80 ;最高位置1,NMI引脚外接一个与门的输出,输入一个是端口0x70最高位的反相,另一个是NMI中断信号,置1可阻断NMI
out 0x70,al ; 0x70为索引端口,用于指定CMOS RAM内的单元
mov al,0x12 ;设置寄存器B,禁止周期性中断,开放更新

本文详细解析了处理器如何处理外部中断,如NMI和INTR,以及中断标志位的作用。介绍了BIOS创建中断向量表的过程,实时时钟中断的类型和寄存器控制,以及在保护模式下内存管理和中断处理的实现。
最低0.47元/天 解锁文章
343

被折叠的 条评论
为什么被折叠?



