为什么在设置中断表idt之前,要设置8259a这个硬件,在《80x86汇编程序教程》杨季文那本书的时候没看在设置中断表前需要设置8259a啊,为什么在写操作系统的时候要设置8259a呢?
好像是因为系统要占用前面一些的中断,所以要把一些IRQ设置后一点
不记得是不是了,如果有错的话请指点
因为intel设计的失误,导致CPU内部中断从0开始,但是为了向下兼容,IRQ号全部从0x20开始,8259A是低级中断管理中枢,高级的叫ACPI还是啥的,中断大概是这么的,详细参见《微机原理》,就是有个ISR字节,还有一个MASK字节,还有一个CTL字节,每次来了外部中断,将8259A的IRQ号引脚电平拉低,然后将ISR对应BIT置位,然后CPU收到引脚电平拉低的信号,(不要问我CPU怎么知道的哦,数字电路里面讲的很详细哦),开始服务,如果是REAL模式,那么找irq * 4 ,irq*4 + 2 找到加载,如果是PROTECTED 模式,那么就找IDT的描述
符加载,异常和中断全部是一个IDT,所以前面32个是 CPU 内部中断,加载过程类似system_call,(以上仅仅是硬件中断,软中断实现方式参见《X86手册》《IA-32》手册,看看我说对了没,好久了,忘光了...
8259A是低级中断管理中枢(硬件,应该说就是外部的,可屏蔽的)。。你可以暂且这么理解:比如时钟中断,就是隔一段时间自动执行 int 0x20,(而执行的条件就是MASK,CTL,ISR来控制的)我们手动执行int 0x20 和 自动执行int 0x20,结果都是一样的,只是触发的条件不同。。。
硬件中断具有随机性,而软中断具有特地性
顺便说句: int 0 和除法错误,执行的代码虽然一样,但是如果如果是真正的除法错误会触发硬件的一些动作,记得是 杨季文 那本书好像讲了,具体在哪儿看到的,记不得了
软中断是NMI,忽视IF,如果在时钟中断里面来了软中断,那么立刻执行软中断.....