第一步、编写汇编程序(day-01.nas)
; hello-os
; TAB=4
; 以下这段是标准 FAT12 格式软盘专用的代码
DB 0xeb, 0x4e, 0x90
DB “HELLOIPL” ; 启动区名称可以是任意字符串
DW 512 ; 每个扇区的大小,必须是 512 字节
DB 1 ; 簇(Cluster)的大小,必须为 1 个扇区
DW 1 ; FAT 的起始位置(一般从第一个扇区开始)
DB 2 ; FAT 的个数(必须为 2)
DW 224 ; 根目录的大小(一般设成 244 项)
DW 2880 ; 该磁盘的大小(必须是 2880 扇区)
DB 0xf0 ; 磁盘的种类(必须是 0xf0)
DW 9 ; FAT的长度(必须是 9 扇区)
DW 18 ; 1 个磁道(Track)有几个扇区(必须是 18)
DW 2 ; 磁头数(必须是 2)
DD 0 ; 不使用分区(必须是 0)
DD 2880 ; 重写一次磁盘大小
DB 0,0,0×29 ; 意义不明,固定
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 ; 2 个换行
DB “hello, world”
DB 0x0a ; 1 个换行
DB 0
RESB 0x1fe – ($ – $$) ; 使用 0x00 填充,直到 0x01fe 结束
DB 0x55, 0xaa
; 以下是启动区以外的部分的输出
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x[……]