为了加深对操作系统的理解,我决定照着《30天自制操作系统》这本书实践一下。项目的github链接是https://github.com/YatesXu/YatesOSASK/
关于十六进制编辑器
第一个问题就是书中给的十六进制编辑器是日文的,在我的电脑上打开之后是一片乱码,于是我比较之后选用了这个十六进制编辑器wxMEdit,链接是https://wxmedit.github.io/。
另外,visual studio也可以,但是express版不能用,所以还是选用免费开源的软件吧(笑)
(伪)启动程序代码
第一个程序是作者用汇编语言写的,应该是启动程序,但并没有加载操作系统的功能,只是输出了一个字符串。这里,我把我的项目命名为YatesOSASK(因为作者管他的系统交OSASK)照着书上的流程,基本没有问题(除了一开始丧心病狂的一堆0)
我把注释翻译了一下(从日文乱码)并且加了一些说明
; hello-os ; TAB=4,TAB键的宽度 ; 一下为标准FAT12格式软盘专用代码,FAT格式是用windows或msdos格式化出来的软盘格式。 DB 0xeb, 0x4e, 0x90 DB "HELLOIPL" ;启动区名称,可以为任意字符串,IPL是启动程序加载器,用来加载操作系统 DW 512 ;每个扇区的大小,必须为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 " ; 磁盘名称,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 "YatesOSASK" 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
总结与思考
第一天的程序基本上就是熟悉了环境,体验了虚拟机,(因为2016年软盘太少见了哈),制作了一个伪启动程序,也算是对操作系统的最开始有了一点理解。
去年学习操作系统理论课的时候,都是概念,没有从实际中去理解。上学期的操作体统实验课,只是用c模拟了一些算法(进程调度啦通信啦),这本书从0开始做操作系统,应该是学以致用的良好契机。
时间: 2024-10-24 12:28:42