setup.s程序详解

setup.s程序主要负责将内核代码移动到0地址,设置中断描述符表和全局描述符表,开启A20地址线,初始化8259A中断芯片,为进入保护模式做准备。文章详细分析了lds、stosb等指令的作用,并解释了A20地址线开启的重要性及8259A的配置。最后,通过jmpi指令进入保护模式。
摘要由CSDN通过智能技术生成

前面已经介绍过了,bootsect.s从软盘中把第2到5扇区的setup.s程序读入到内存0x90200地址处。不清楚的朋友可以参见bootsect详解。那么setup.s到底做了什么呢?

第一件事情就是利用BIOS中断程序填下面这张表格的内容:

第二件事就是将0x10000(64K)地址到0x8ffff这段system内核代码移动到0地址处。因为我们已经使用完所有的BIOS中断程序,所以由BIOS在0地址处建立的中断向量表也可以覆盖掉。

第三件事是为进入保护模式做准备,包括加载和填充中断描述符寄存器和全局描述符寄存器、开启A20地址线、重新设置两个中断控制芯片8259A,将中断号重新设置为0x20-0x2f。

注意:setup.s为了让程序顺利进入保护模式,临时设置了中断描述符表idt和全局描述符表gdt,并且在gdt中设置了当前内核代码段的描述符和数据段的描述符。最终在head.s中会根据内核的需要重新设置这些描述符表。

第四件事就是设置CPU的机器状态字寄存器CR0的PE位,进入保护模式,并跳转到system模块最前面的head.s程序继续执行。

在开始分析代码之前,先来看看实模式与保护模式寻址上的差异:

a)图记住一点,段的最大长度固定为64KB;

b)图段寄存器中保存的不再是段基地址而是描述符表的索引,并且段的最大长度是可变的。

代码的详细分析主要从下面几点考虑:

1)lds si,[4*0x41]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值