30天自制操作系统之第1天

    xiaoxiao2021-12-14  18

    转载自:http://www.fanis.cn/post/16

    本节从计算机结构讲到汇编程序编写的最小化启动程序加载器IPL(Initial Program Loader),汇编编译器使用NASM,虚拟机使用QEMU,每个章节都有对应的代码段,是编写操作系统非常实用的一本教材。

    这里制作软盘的代码含义如表中所示:

    偏移

    字节

    内容/含义

    (参考)值

    0

    3

    跳转到软盘指令开始处的跳转指令

    jmp l_start(l_start为软盘内第一条指令处的标号)

    3

    8

    第一个扇区的名字

    "xnlosipl"

    11

    2

    软盘每个扇区的大小(字节为单位)

    必须为512

    13

    1

    每簇的扇区数

    必须为1

    14

    2

    保留扇区数/FAT的起始位置/Boot记录占用扇区

    一般为1

    16

    1

    FAT的个数

    必须为2

    17

    2

    根目录文件数的最大值

    一般为224

    19

    2

    扇区总数

    (必须为)2880

    21

    1

    介质描述符

    必须为0xf0

    22

    2

    每FAT扇区数

    必须为9

    24

    2

    每磁道扇区数

    必须为18

    26

    2

    磁头数

    必须为2

    28

    4

    隐藏/不使用的扇区数

    必须为0

    32

    4

    如果偏移19处值为0,由这个值表示总扇区数

    2880

    36

    1

    中断13h的驱动器号

    固定为0

    37

    1

    未使用

    固定为0

    38

    1

    扩展引导标记

    固定为0x29

    39

    4

    卷列序号

    0xffffffff

    43

    11

    软盘名称

    "xnlhello-os"

    54

    8

    软盘格式名称

    "FAT12   "(8字节,空格填充)

    62

    448

    (引导)代码、数据及其它填充字符

    ……

    510

    2

    标明软盘有无所需的启动代码(在第一个扇区内)

    0x55aa(为0x55aa表明有)

     

     

    下面直接上本章代码:

    ; hello-os; TAB=4 ;以下的记述用于标准FAT12格式的软盘  DB 0xeb,0x4e,0x90 DB "HELLOIPL";启动区的名称可以是任意的字符(8字符) DW 512;每个扇区的大小 DB 1;簇的大小(必须为1个扇区) DW 1; FAT的起始位置(一般从第一扇区开始) DB 2; FAT的个数(必须为2 DW 224;根目录的大小(一般设为224 DW 2880;该磁盘的大小(必须为2880扇区) DB 0xf0;磁盘的种类(必须是0xf0 DW 9; FAT的长度,必须是9扇区 DW 18;1个磁道有几个扇区,必须是18 DW 2;磁头数,必须是2 DD 0;不使用分区,必须是0 DD 2880;重写一次磁盘大小 DB 0,0,0x29;意义不明,固定 DD 0xffffffff;卷标号码 DB "HELLO-OS ";磁盘名称 DB "FAT12 ";磁盘格式 RESB 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;2个换行 DB "hello,world" DB 0x0a;换行 DB 0 RESB 0x1fe-$ ;填入0x00,直到510字节 DB 0x55,0xaa;启动区以外部分的输出  DB 0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00 RESB 4600 DB 0xf0,0xff,0xff,0x00,0x00,0x00,0x00,0x00 RESB 1469432
    转载请注明原文地址: https://ju.6miu.com/read-970420.html

    最新回复(0)