L3 操作系统启动 Power On


int 0x15:获得物理内存的大小,把值放在ax中,再把ax中的值放在段寄存器<<4 + 2的位置,即0x90002
再do_move中,通过设置cx,ds:si,es:di,将原来放在9000:0000处的操作系统代码移动到0000:0000处(之前把代码从7c00处移动到90000处也是为了给后续的移动腾出地方来)

接下来,进入保护模式:

此时执行 jmpi 0,8就不再是实模式下的方法了,而是使用保护模式下的方式
传统的实模式下,段基址:偏移地址的形式最多只能寻址20位(1M的空间)

需要切换到保护模式,切换到32位(4G)的寻址空间


现在cs不代表段基址了,而代表段选择子,其实存储的是查表的下标(索引),再GDT中选择一个基址,再和偏移地址相加

所以应该先对GDT表进行填充:

具体看一下 jmpi 0, 8怎么查表

接下来调转到system模块执行:
system模块,第一快的代码时head.S
看一下head.S做了哪些事情:


接下来看看系统的main函数做了些什么工作:





posted @ 2020-11-10 22:48  scnb  阅读(165)  评论(0)    收藏  举报