操作系统(一)
软盘
一张软盘共有1440KB的空间,也就是1474560字节。所以要创建一个1474560字节的映像文件。(最终地址为167FFFFH)
启动区(boot sector)
软盘的第一个扇区(地址0000H~01FFH)。计算机在读写软盘时,是以512个字节为一个单位进行读写的。计算机读取第一个块,如果最后两个字节是55AAH则认为是启动区。启动区主要包括FAT12格式代码,以及IPL代码。
FAT-12
用Windows或MS-DOS格式化出来的软盘就是这种格式,而我们的操作系统也采用这种格式。
以下这段是标准FAT12格式软盘专用的代码
DB 0xeb, 0x4e, 0x90
DB "HELLOIPL" ; 启动区的名称可以是任意的字符串(8字节)
DW 512 ; 每个扇区的大小(必须为512字节)
DB 1 ; 簇的大小(必须为1个扇区)
DW 1 ; FAT的起始位置(一般从第一个扇区开始)
DB 2 ; FAT的个数(必须为2)
DW 224 ; 根目录的大小(一般设成224项)
DW 2880 ; 该磁盘的大小(必须是2880扇区)
DB 0xf0 ; 磁盘的种类(必须是0xf0)
DW 9 ; FAT的长度
DW 18 ; 一个磁道有几个扇区(必须是18)
DW 2 ; 磁头数(必须是2)
DD 0 ; 不使用分区,必须是0
DD 2880 ; 重写一次磁盘大小
DB 0,0,0x29 ; 意义不明,固定
DD 0xffffffff ; (可能是)卷标号码
DB "HELLO-OS " ; 磁盘的名称(11字节)
DB "FAT12 " ; 磁盘格式名称(8字节)
RESB 18 ; 先空出18字节
; 程序主体
DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB 0xee, 0xf4, 0xeb, 0xfd
; 信息显示部分
DB 0x0a, 0x0a ; 两个换行
DB "hello, world"
DB 0x0a ; 换行
DB 0
RESB 0x1fe-$ ; 填写0x00,直到0x001fe
DB 0x55, 0xaa
IPL(启动程序加载器)
一个加载操作系统的程序(置于启动区中) 开头EB在机器语言中为相对短跳转的意思。 EB 4E 90,即跳转到地址为4EH处,而90H是空操作用于填空间。 所以开头的机器码表示的意思就是跳转到IPL程序的地址。
|