码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-04-15 23:09:25      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

刚开始作者叫我们用二进制编辑器,手敲01代码写了个IMG(磁盘映像文件)

,并提供了一些文件

         Run.bat, install.bat这些一个批处理文件,其实就是写好了cmd指令保存到文档里面,方便以后执行。

 

其中run.bat里面的指令是这样的

copy helloos.img ..\z_tools\qemu\fdimage0.bin

..\z_tools\make.exe         -C ../z_tools/qemu

 

(稍微解释一下:第一行:copy指令把,helloos.img 复制成..\z_tools\qemu\fdimage0.bin其中 ..\表示上级目录。

第二行使用make程序 -C ../z_tools/qemu 表示传递给make的参数。具体什么作用目前还不知道)

 

然后是install.bat:

..\z_tools\imgtol.com w a: helloos.img  //此句是将helloos.img写到软盘上

(我也不会,刚百度的。)

 

作者提供了一个虚拟器,所以为了避免麻烦,我就使用虚拟器了。

哦,虚拟器,run.bat的作用就显而易见了,就是把磁盘映像复制到虚拟器目录下然后并启动它。

 

或许作者觉得手写01代码实在过于麻烦,于是他又改用了汇编代码。

书中使用的汇编编译器 NASK是作者自己开发的

 

第一段汇编代码中作者只是使用了 DB指令,表示定义一个字节。

作者也觉得的代码太长,于是又使用了RESB指令。

RESB是给编辑器的指令,告诉编辑器空出多少多少空间来,作者的nask编辑器,会自动给空出来的地址补上0x00,这样代码长度就减少多了!

 

然后作者竟然一个大跳跃,直接上了连爹妈都不认识的改良版代码。

刚开始一堆DB DW的,作者称为标准FAT12软盘专用代码。

我不知道为什么需要这个东西。。特地百度了下:

         这段完全由数据组成的代码只是符合了一个软盘启动扇区的标准

好吧,我自己反正是不太明白,于是我又百度了一个答案:

    引导扇区是软盘的第0个扇区,在这个扇区中有一个很重要的数据结构叫BPB(BIOS Parameter Block),下面是引导扇区格式,其中BPB_开头的属于BPB,以BS_开头的只是BOOT Sector的一部分,不属于BPB。

名称

开始字节

长度

内容

参考值

BS_jmpBOOT

0

3

一个短跳转指令

jmp Label_07c00H
nop

BS_OEMName

3

8

厂商名

‘QingFeng‘

BPB_BytesPerSec

11

2

每扇区字节数(Bytes/Sector)

0x200

BPB_SecPerClus

13

1

每簇扇区数(Sector/Cluster)

0x1

BPB_ResvdSecCnt

14

2

Boot记录占用多少扇区

ox1

BPB_NumFATs

16

1

共有多少FAT表

0x2

BPB_RootEntCnt

17

2

根目录区文件最大数

0xE0

BPB_TotSec16

19

2

扇区总数

0xB40[2*80*18]

BPB_Media

21

1

介质描述符

0xF0

BPB_FATSz16

22

2

每个FAT表所占扇区数

0x9

BPB_SecPerTrk

24

2

每磁道扇区数(Sector/track)

0x12

BPB_NumHeads

26

2

磁头数(面数)

0x2

BPB_HiddSec

28

4

隐藏扇区数

0

BPB_TotSec32

32

4

如果BPB_TotSec16=0,则由这里给出扇区数

0

BS_DrvNum

36

1

INT 13H的驱动器号

0

BS_Reserved1

37

1

保留,未使用

0

BS_BootSig

38

1

扩展引导标记(29h)

0x29

BS_VolID

39

4

卷序列号

0

BS_VolLab

43

11

卷标

‘QingFeng‘

BS_FileSysType

54

8

文件系统类型

‘FAT12‘

引导代码及其他内容

62

448

引导代码及其他数据

引导代码(剩余空间用0填充)

结束标志0xAA55

510

2

第510字节为0x55,第511字节为0xAA

0xAA55

 

      

 

噢!原来是数据结构。叫做BIOS Parameter Block (BIOS参数块),那么顾名思义一下?或许是给bios读取用的吧!?

 

        

对了还有一个重要的$符号,作者解释的很详细了,博主比较懒,所以就不打字了!

 

 技术分享

 

 

好啦,只剩下几个名词了,自己看书吧。

 

稍微总结下不太熟悉的几个知识点:

1、  启动区是第一个扇区,512字节为一个扇区。扇区的最后2个字节为55 AA

启动区的名称必须是8个字节,不够的话空格补齐.

2、  IPL ,启动程序加载器。启动区只有512字节,所以在这里面根本装不下操作系统,

所以里面里面存放的是加载操作系统本身的程序。

3、db定义字节型1字节,dw定义字类型2字节,dd定义双字类4字节

 

恩,时间不早了,第一天就这么过去吧. 喂喂喂!那段这么长的代码,你倒是分析下啊!

 

(不会!)

 

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

标签:

原文地址:http://www.cnblogs.com/You0/p/4430422.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!