下面继续来看bootsect部分如何搬移system模块到0x10000即64K内存处的:
首先将system段的地址0x1000存放到es段寄存器中,然后调用read_it子调用汇编函数。下面来看read_it都做了什么:
开始之前,我们先来回顾一下开头的一段话:
注意这里,linus说当前系统(这里指system模块)最大8*65536.这个值是64K*8=512K,那么这个512K是从哪里来的?
答案:system模块被加载到了0x10000处,而bootsect被加载到了0x90000处,那么中间就是0x80000字节空间即512K字节。
下面我们分段对整个读取system模块的代码进行分析:
首先,这里es寄存器的值为前面传入的0x1000,test语句就是将0x1000与0x0fff相与结果就是0,这个结果会影响到ZF标