30天自制操作系统-merk11的第一天


30天自制操作系统-merk11的第一天

自制操作系统是因为学校老师留的实验作业,也是为了加深自己对操作系统的细节理解。

在google上千辛万苦找到了一些适合于新手开发简单操作系统的教程

用的环境是windows,虚拟环境是QEMU

书籍:

《30天自制操作系统》出版社:人民邮电出版社

github中文磁盘源码对照:

https://github.com/yourtion/30dayMakeOS

https://github.com/chenganglist/30dayMakeOS

书籍pdf在线:

http://file.qijin.tech/ebooks/30天自制操作系统_compressed.pdf

衷心感谢以上资源的提供者,为初出茅庐的大学牲提供了帮助👏👏👏

笔记:

环境配置: 二进制编辑器(十六进制编辑器)

VScode,Winhex ,NotePad++ 或者其他自己用得熟的编辑器都可以

汇编指令学习:

DB: 是“define byte”的缩写,也就是往文件里直接写入1个字节的指令。可以直接用它写字符串

DB   "hello,world"

RESB:是“reserve byte”的略写,如果想要从现在的地址开始空出10个字节来,就可以 写成RESB 10,意思是我们预约了这10个字节(大家可以想象成在对号入座的火车里,预订了10 个连号座位的情形)。

DW:和DB类似,一次读取2个字节

DD:和DB类似,一次读取4个字节

美元符号:这里是个变量,可以告诉我们这一行现在的字节数

RESB     0x1fe-$

主要源码(可以自己尝试写的部分):

; hello-os
; TAB=4

; 标准FAT12格式软盘专用的代码 Stand FAT12 format floppy code

​	DB		0xeb, 0x4e, 0x90
​	DB		"MERK11"		; 启动扇区名称(8字节)
​	DW		512				; 每个扇区(sector)大小(必须512字节)
​	DB		1				; 簇(cluster)大小(必须为1个扇区)
​	DW		1				; FAT起始位置(一般为第一个扇区)
​	DB		2				; FAT个数(必须为2)
​	DW		224				; 根目录大小(一般为224项)
​	DW		2880			; 该磁盘大小(必须为2880扇区1440*1024/512)
​	DB		0xf0			; 磁盘类型(必须为0xf0)
​	DW		9				; FAT的长度(必须是9扇区)
​	DW		18				; 一个磁道(track)有几个扇区(必须为18)
​	DW		2				; 磁头数(必须是2)
​	DD		0				; 不使用分区,必须是0
​	DD		2880			; 重写一次磁盘大小
​	DB		0,0,0x29		; 意义不明(固定)
​	DD		0xffffffff		; (可能是)卷标号码
​	DB		"MERK-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		"It is impossible to manufacture or imitate love."
​	DB		0x0a			; 换行
​	DB		0

​	RESB	0x1fe-$			; 填写0x00直到0x001fe

​	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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM