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


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

    ,并提供了一些文件

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

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

    copy helloos.img ..z_toolsqemufdimage0.bin

    ..z_toolsmake.exe         -C ../z_tools/qemu

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

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

    然后是install.bat:

    ..z_toolsimgtol.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字节

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

    (不会!)

  • 相关阅读:
    数据--第28课
    数据--第27课
    数据--第26课
    数据--第25课
    数据--第23课
    数据--第24课
    数据--第22课
    数据--第21课-递归课后练习
    lambda表达式
    数组和链表
  • 原文地址:https://www.cnblogs.com/You0/p/4430422.html
Copyright © 2020-2023  润新知