30天自制操作系统(第一天笔记)

第一天主要是涉及一些比较基础的概念,大多都是关于操作系统基本知识以及一些硬件操作的

这里主要讲一下关于FAT12的一些概念:

启动区:软盘的第一个扇区称为启动区,一般启动盘的后两个字节为55AA,不然计算机认为这个系统没有启动程序

 1 ;hello-os
 2 ;TAB=4
 3
 4 ;以下这段是标准FAT12格式软盘专用代码
 5     DB        0xeb, 0x4e, 0x90
 6     DB        "HELLOIPL"      ;启动扇区的名称可以使任意的字符串
 7     DW        512                 ;每个扇区的大小(必须为512字节)
 8     DB        1              ;簇的大小(必须为1个扇区)
 9     DW        1               ;FAT的起始位置(一般从第一个扇区开始)
10     DB        2                 ;FAT的个数(必须为2)
11     DW        224               ;根目录的大小(一般设置为224)
12     DW        2880           ;该磁盘的大小(必须是2880扇区)
13     DB        0xf0               ;磁盘的种类(必须是0xf0)
14     DW        9               ;FAT的长度(必须是9扇区)
15     DW        18               ;1个磁道有几个扇区(必须是18)
16     DW        2              ;磁头数(必须是2)
17     DD        0              ;不试用分区(必须是0)
18     DD        2880            ;重写一次磁盘大小
19     DB        0,0,0x29        ;固定
20     DD        0xffffffff      ;(可能是)卷码标号
21     DB        "HELLO-OS   "      ;磁盘的名称(11字节)
22     DB        "FAT12   "       ;磁盘格式的名称(8字节)
23     RESB    18            ;先空出18字节
24
25 ;程序的主体
26     DB        0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
27     DB        0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
28     DB        0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
29     DB        0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
30     DB        0xee, 0xf4, 0xeb, 0xfd
31
32 ;信息显示部分
33     DB        0x0a, 0x0a      ;2个换行
34     DB        "hello, world"
35     DB        0x0a          ;换行
36     DB        0
37     RESB    0x1fe-$          ;填写0x00,直到0x001fe
38     DB        0x55, 0xaa
39
40 ;以下是启动区以外部分的输出
41     DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
42     RESB    4600
43     DB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
44     RESB    1469432

第一天的内容也比较简单,没什么好说的,另外还涉及到一些CPU和汇编的基础知识,关于这方面,书的作者写得比我好多了,期待第二天的内容

时间: 2024-08-24 23:36:15

30天自制操作系统(第一天笔记)的相关文章

《30天自制操作系统》读书笔记(4) 绘图

暑假果然是滋生懒散的温床. (╯‵□′)╯︵┻━┻ 好久不动都忘记之前做到哪里了, 上次好像做到了C语言的引入, 这一节所做的东西都相当轻松, 将会绘制出操作系统的基本界面. 绘图的原理 按照书中所说, 将值写入到显存中就能在屏幕上显示相应的像素, 在asmhead.nas 中有这一段: 1 CYLS EQU 0x0ff0 ; 设定启动区 2 LEDS EQU 0x0ff1 3 VMODE EQU 0x0ff2 ; 关于颜色数目的信息,颜色的位数 4 SCRNX EQU 0x0ff4 ; 分辨率

《30天自制操作系统》读书笔记(5) GDT&IDT

梳理项目结构 项目做到现在, 前头的好多东西都忘了, 还是通过Makefile重新理解一下整个项目是如何编译的: 现在我们拥有这么9个文件: ipl10.nas    InitialProgramLoader, 占用了软盘的第一个扇区并符合启动盘的规范, 默认被载入地址是0x7c00 到 0x7e00, 负责将10个柱面读入到0x8200到0x34fff (10个柱面共10*2*18 = 360 个扇区但是第一个没有被读入); asmhead.nas     包含一些暂时未知的设定; naskf

《30天自制操作系统》读书笔记(2)hello, world

让系统跑起来 要写一个操作系统,我们首先要有一个储存系统的介质,原版书似乎是06年出版的,可惜那时候没有电脑,没想到作者用的还是软盘,现在的电脑谁有软驱?不得已我使用一张128M的SD卡来代替,而事实上你用的是U盘还是软盘对我们的操作系统没有影响,缺点是你的U盘刷入系统后容量只能是1440 MB,即当年流行的3.5英寸软盘的大小,当然不用担心,再格式化一次(用DiskGeniu),就可以恢复. 我做事情的话,总是怕自己的努力的结果白费了,害怕辛辛苦苦看完这本书但是发现做出来的东西现在根本没法用,

《30天自制操作系统》读书笔记(3) 引入C语言

这一次的学习相当曲折, 主要是因为粗心, Makefile里面的错误导致了文件生成出现各种奇奇怪怪的问题, 弄得心力交瘁, 因此制作过程还是尽量按着作者的路子来吧. 作者提供的源码的注释在中文系统下是乱码, 而且代码的分隔用了两个Tab, 在这里要处理一下: :%s/;.*//g 删除所有的注释; :%s/\t\t/\t 把两个Tab替换为一个Tab; 要让作者的nas文件和asm文件拥有相同的语法规则, 在_vimrc文件的最后一行添加 au BufNewFile,BufRead *.nas

《30天自制操作系统》读书笔记(1)读前感

做一个自己的操作系统, 在我看来一直是不可以思议的,而且奇妙的,像是吉他手亲手打造一把自己的吉他? 似乎这个比喻不太恰当, 但是,感觉是一样的. <30天自制操作系统> 为日本的川和秀实先生所著, 有人说他是 "<XX天学会XXX>之类的书中为数不多的几本好书之一." 这本书的优点非常明显,通俗生趣,甚至于有点啰嗦:而且作者无私地提供了源代码而且允许你以任何方式使用,也提供了编译的所有工具,所有东西都是"开箱即用",不容易出问题. 作为后生我

《30天自制操作系统》学习笔记-第1天

为了加深对操作系统的理解,我决定照着<30天自制操作系统>这本书实践一下.项目的github链接是https://github.com/YatesXu/YatesOSASK/ 关于十六进制编辑器 第一个问题就是书中给的十六进制编辑器是日文的,在我的电脑上打开之后是一片乱码,于是我比较之后选用了这个十六进制编辑器wxMEdit,链接是https://wxmedit.github.io/. 另外,visual studio也可以,但是express版不能用,所以还是选用免费开源的软件吧(笑) (伪

30天自制操作系统第一天--helloworld

第一天是用二进制编辑器写helloworldos 百度bz.exe这个二进制编辑器下载 在bz里边敲入或复制进十六进制的数据,保存为.img格式 作者是用qemu模拟器运行了这个系统. 我另外用VMware软盘加载这个img文件也能成功显示出hello world 注:01fe处必须是55AA.即第一扇区最后俩字节是55AA

《30天自制操作系统》笔记(12)——多任务入门

<30天自制操作系统>笔记(12)——多任务入门 进度回顾 上一篇介绍了设置显示器高分辨率的方法.本篇讲一下操作系统实现多任务的方法. 什么是多任务 对程序员来说,也许这是废话,不过还是说清楚比较好. 多任务就是让电脑同时运行多个程序(如一边写代码一边听音乐一边下载电影). 电脑的CPU只有固定有限的那么一个或几个,不可能真的同时运行多个程序.所以就用近似的方式,让多个程序轮换着运行.当轮换速度够快(0.01秒),给人的感觉就是"同时"运行了. 多任务之不实用版 我们首先从

《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

<30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的装载地址 5 6 ; 以下这段是标准FAT32格式软盘专用的代码 7 8 JMP entry 9 DB 0x90 10 DB "HELLOIPL" ; freeparam 启动区的名称可以是任意的字符串(8字节) 11 DW 512 ; 每个扇区(sector)的大小(必须为512字节)

《30天自制操作系统》笔记(02)——导入C语言

<30天自制操作系统>笔记(02)--导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL代码(helloos.nas).编译生成helloos.img文件.用虚拟机QEMU加载helloos.img.制作U盘启动盘和用物理机加载helloos.img. 计算机启动时会自动加载和执行IPL程序,但IPL程序只能占用512字节.若直接用IPL写OS,空间不够用.所以IPL程序一般用于将真正的OS程序