设为首页 加入收藏

TOP

Linux0.11内核--启动引导代码分析setup.s
2014-11-24 13:07:17 来源: 作者: 【 】 浏览:0
Tags:Linux0.11 内核 启动 引导 代码 分析 setup.s

setup的整体作用:


首先利用BIOS中断读取机器的数据,将其保存在地址0x9000:0x0000处,覆盖了原来bootsect.s代码所在的位置,由于bootsetc模块的代


码运行完毕,已经没有其他的用处了,所以可以将其覆盖掉。



然后关闭中断,setup将system模块整体移动至内存起始处,原来位于0x1000:0x0000,由于movsb和movsw指令的功能是移动一个字节或


者一个字,源地址由寄存器ds:si指定,目的地址由es:di指定。


指令cld指明di和si的方向是递增,而std是递减。


由于system模块大小超过64K(实模式一个段的最大偏移),而移动指令需要指明段寄存器,所以需要分段移动,下面是移动代码,代码语法是


AT&T改写的



然后设置数据段寄存器ds并加载中断描述符和全局描述符



lidt和lgdt的操作数是6个字节


第一第二字节表示描述符表的长度值,第三到第六字节表示的是32位的线性基地址(描述符在内存的中的位置)


GDT格式的详情请见


idt_48和gdt_48的内容如下:



其中gdt_48中第一个字节表示描述符表中的描述符的个数,由于GDT表在内存中占用2KB的内存空间,一个GDT有64位(8个字节),故有256项,后面四个字节表示一个32位的线性地址0x0009<<16+0x0200+gdt


实际就是本程序中的gdt的地址。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux0.11内核--启动引导代码分析.. 下一篇Linux0.11内核--idt(中断描述符..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Sphinx : 高性能SQL (2025-12-24 10:18:11)
·Pandas 性能优化 - (2025-12-24 10:18:08)
·MySQL 索引 - 菜鸟教 (2025-12-24 10:18:06)
·Shell 基本运算符 - (2025-12-24 09:52:56)
·Shell 函数 | 菜鸟教 (2025-12-24 09:52:54)