好的,第六天的笔记开始!
如题,今天的主要内容就是分割编译与中断处理。
首先说分割编译。这是由于把所有函数都放在一个源文件里使得略显庞大,为此可以根据功能划分为多个文件。
而各个文件公用的,比如定义的常数,和公用的函数的声明,便写在.h的文件里,也就是头文件里。这样,在每个文
件开始时,只要写上#include "xxx.h"即可。一个细节,""代表头文件和源文件在同一个文件夹里,<>则表示头文件
在编译器所提供的文件夹里。
现在对昨天的笔记中的GDT做一些补充说明。段的属性中有一个标志位,叫Gbit,当这个标志位是1的时候,
limit的单位是页(page),而不是字节(byte),在电脑的CPU里,一页是4KB。
接下来的内容,是今天最重要的内容,也就是PIC。这里开始引入中断,是为了接下来马上连带着的鼠标和键盘
的部分,这里是头,要好好看懂。所谓PIC就是programmable interrupt controller,是一个将8个中断信号集合成
一个中断信号的装置。如Intel的 8259A。关于PIC的具体知识可以参照《微机接口》。其最关键的内容是
ICW(initial control word)和 OCW(operate control word)。鼠标是IRQ12,键盘是IRQ1,而本书中INT 0x20到
INT 0x2f接收中断信号IRQ0到IRQ15 。在编写完中断例程asm_handler21后,应将例程注册到idt的0x21号。
注册的具体语句如下:
set_garedesc( idt + 0x21, (int)asm_inthandler21, 2*8, AR_INTGATE32 );
这样设定完之后,如果发生第21号中断,CPU就会自动调用asm_handler21。此处2*8代表段号是2,*8是因为
低3位有别的意思。最后的AR_INTGATE32 将IDT的属性设定为0x008e,它表示中断处理的有效设定。
第6天的笔记到此结束,明天开始更进一步地研究利用中断完成对鼠标和键盘的控制。