Skip to content

Day1

assembly
; hello-os
; TAB=4

; 以下是Fat12格式的软盘专用代码

		DB		0xeb, 0x4e, 0x90	;DB: define byte写入一个字节的指令
		DB		"HELLOIPL"		; 启动区的名字,任意的字符, 8字节
		DW		512				; 一个扇区的大小
		DB		1				; 一个簇的大小
		DW		1				; FAT的起始位置
		DB		2				; FAT的个数
		DW		224				; 根目录的大小,一般为224
		DW		2880			; 磁盘大小
		DB		0xf0			; 磁盘的种类
		DW		9				; FAT的长度
		DW		18				; 一个磁轨的扇区数
		DW		2				; 磁头数
		DD		0				; 不用进行分盘
		DD		2880			; 重写一次的磁盘大小
		DB		0,0,0x29		; 意义不明, 固定
		DD		0xffffffff		; 
		DB		"HELLO-OS   "	; 磁盘的名字11字节
		DB		"FAT12   "		; 磁盘格式的名字
		RESB	18				; 空出18字节, reserve byte: 空出字节

; 程序主体

		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		; \n\n
		DB		"hello, world"
		DB		0x0a			; \n
		DB		0

		RESB	0x1fe-$			; 写入0x00直到0x1fe, $代表自己本身的位置地址

		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

FAT12: 软盘格式

启动区: 软盘的第一个区

IPL: inital program loader启动程序加载器