今年的国庆长假真是热闹,各个景区真可谓是人满为患。回趟家真心都不容易,路上各种堵,今天折腾了一天终于算是回到学校了。这个国庆啥都没干,死宅在家看电视、看书、码代码神马的感觉真心不错。假期开始看一本小日本的书《30天自制操作系统》,今天看到了书中内容的第八天,感觉书写的不错。但我只是看书+读代码,并没有自己维护一份代码,看到书中的第八天,前面的东西又忘了,所以今天开始做读书笔记并且自己维护一份代码。亲自敲一遍代码的好处不用多说,再者随书光盘中的代码注释并没有翻译成中文,所以说维护一份带中文注释的代码好处多多!
下面切入正题!
--------------------------------------------------------------------------------------------------------------------------------------------
第零天对什么操作系统、书中将要用到的技术做了介绍,同时给出了各章节的主要内容。
第一天的内容其实没有什么好记录的,但其中的一些概念还是了解一下为妙。
第二天才是后面内容的一个铺垫,程序功能和第一天的一样(让程序在电脑开机的时候自行启动),只不过比第一天的更加容易阅读和理解。下面直接上代码,当然这一天当中一些概念还是需要了解的。
ipl.nas
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | ; ipl.nas ;TAB=4 ORG0x7c00;程序的装载地址 ;以下的记述用于标准FAT12格式的软盘 JMPentry DB0x90 DB"HELLOIPL" ;启动区的名称可以是任意的字符(8字符) DW512;每个扇区的大小 DB1 ;簇(cluster)的大小(必须为1个扇区) DW1 ;FAT的起始位置(一般从第一个扇区开始) DB2 ;FAT的个数(必须为2) DW224;根目录的大小(一般设成224项) DW2880 ;该磁盘的大小(必须为2880扇区) DB0xf0 ;磁盘的种类(必须是0xf0) DW9 ;FAT的长度(必须是9扇区) DW18 ;1个磁道(track)有几个扇区(必须是18) DW2 ;磁头数(必须是2) DD0 ;不使用分区,必须是0 DD2880 ;重写一次磁盘大小 DB0,0,0x29 ;意义不明,固定 DD0xffffffff ;(可能是)卷标号码 DB"HELLO-OS" ;磁盘的名称(11字节) DB"FAT12" ;磁盘格式名称(8字节) RESB18 ;先空出18字节 ;程序核心 entry: MOVAX,0 ;初始化寄存器 MOVSS,AX MOVSP,0x7c00 MOVDS,AX MOVES,AX MOVSI,msg putloop: MOVAL,[SI] ADDSI,1 ; 给SI加1 CMPAL,0 JEfin MOVAH,0x0e;显示一个文字 MOVBX,15 ;指定字符颜色 INT0x10 ;调用显卡BIOS JMPputloop fin: HLT ;让CPU停止,等待指令 JMPfin;无限循环 msg: DB0x0a,0x0a ;换行2次 DB"DUKEOS" DB0x0a ;换行 DB0 RESB0x7dfe-$ ;填写0x00,直到0x07dfe($代表将要读入的内存地址) DB0x55,0xaa |
PS:
如果你想在linux上做同样的事情,那么你可以参考一下面连接出的博客(作者是在Ubuntu上开发的,写的很不错哦!)
h397916230的专栏
国庆期间,博主选择死宅家中,开始阅读并实践《30天自制操作系统》一书。本书引导读者从零开始构建自己的简易操作系统。博主决定边读边做笔记,并尝试亲手实现代码,以加深理解和记忆。

被折叠的 条评论
为什么被折叠?



