SYSSIZE = 0x3000
SETUPLEN = 4 ! nr of setup-sectors
BOOTSEG = 0x07c0 ! original address of boot-sector
INITSEG = 0x9000 ! we move boot here - out of the way
SETUPSEG = 0x9020 ! setup starts here
SYSSEG = 0x1000 ! system loaded at 0x10000 (65536).
ENDSEG = SYSSEG + SYSSIZE ! where to stop loading
ROOT_DEV = 0x306
在进行分析代码之前,需要注意的是boot文件夹中,bootsect和head中的汇编是基于intel汇编格式,而setup则是基于AT&T汇编语言。这也就是为什么在Makefile中存在两种汇编器。前者用于编译16位的汇编代码,用as86和ld86进行编译;而后者则已经进入到32位代码下面运行,利用as和ld进行编译。boot文件夹中存在这三个文件,其中bootsect和setup分别编译成单独的二进制单元,而head则和后面的C文件链接到system中。根据下面图可以知道boot文件夹里面三个文件的用处。bootsect部分主要用于检测磁盘参数并加载setup文件,而setup文件则将system整体复制到内存,并将system转移到系统的起始内存。这样分两步可以避免将BIOS提供的中断服务给覆盖。