30天自制操作系统-day3

30天自制操作系统-day3

前2天我们分别使用了直接使用二进制编辑器和简单的汇编指令生成了img文件,今天我们尝试一下使用稍微复杂一点的汇编指令

os.asm文件内容如下:

; hello-os
; TAB=4
; 以下是FAT12标准软盘专用代码

		DB		0xeb, 0x4e, 0x90
		DB		"HELLOIPL"		; 启动区名称
		DW		512				; 每个扇区的大小,必须是512字节
		DB		1				; 簇的大小,为一个扇区
		DW		1				; FAT的起始位置
		DB		2				; FAT的个数,必须为2
		DW		224				; 根目录的大小,一般设立为224项
		DW		2880			; 磁盘大小,必须为2880个扇区
		DB		0xf0			; 磁盘的种类,必须是0xf0
		DW		9				; FAT的长度,一般为9扇区
		DW		18				; 1个磁道
		DW		2				; 磁头数
		DD		0				; 不使用分区,必须是0
		DD		2880			; 重写一遍磁盘大小
		DB		0,0,0x29		; 意义不明,固定这样写
		DD		0xffffffff		; 卷码编号
		DB		"HELLO-OS   "	; 磁盘名称,11个字节
		DB		"FAT12   "		; 磁盘格式名称,18字节
		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 day3"   
		DB		0x0a			; 改行
		DB		0
	
		RESB	0x1fe-$			; 填写0x00,直到0x001fe,如果此处有报错,可以直接将表达式写成0x1fe-$-->373
	
		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://www.cnblogs.com/wangdongfang/p/14224403.html