setup.s程序的主要功能:
1.利用BIOS中断将机器信息读取到0x90000 到0X901FC之间,给以后的程序使用。(即将bootsect.s程序覆盖)
2.关中断,并将整个系统模块从0x10000处开始搬到从0X00000处。
3.加载临时中断描述符表寄存器和全局描述符表,并开启A20信号线,重新设置8259中断控制器。
4.进入保护模式,设置段选择符,开始执行head.s
重点:
1.关于实模式和保护模式的区别
实模式是运行在8086的条件下的,寻址模式是平铺的,即CS,DS,ES,SS的地址是32位的实际地址。保护模式下的寻址模式是段式或者是页式的,CS,DS,ES,SS中存放的是段选择符。
2.关于段描述符和段选择符
段描述符是描述一个段的数据结构,长度为8个字节,主要含有3个主要字段:段基地址、段限长和段属性。而段选择符则相当于一个下标来获取段描述符的,整个系统的段都是保存在GDT(全局描述符表),LDT(局部段描述符表)中的,GDT,LDT则是一个段描述符数组,系统就是根据段选择符所表示的信息来确定段在数组中的位置和所在的数组,
GDT和LDT的基址分别存放在GDT寄存器和LDT寄存器中。
3.关于A20和8259中断控制器的编程是个小重点。
问题:
为什么要把系统从0X10000搬到0X00000处
把系统从0X10000处搬到0X00000处是为了让内存处于绝对物理对齐。在SETUP.S中,系统加载了一个临时的中断描述符表和一个临时的全局段描述符表,为接下来的运行保护模式进行好铺垫。接下来切换到保护模式,并设置好CS的段选择符,接下来就交与head.s进行控制