《30天自制操作系统》第一天

Posted NONE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《30天自制操作系统》第一天相关的知识,希望对你有一定的参考价值。

一开始作者搞了一个装满二进制的文件,用binary editor来制作。该软件下载地址http://www.vcraft.jp/soft/bz.html

技术分享

当然,在我看来,这些二进制没什么意义,因为根本无法阅读。

但作者是想让读者了解cpu其实就是解读二进制指令的。

直接附上第一天的汇编代码:

 

; hello-os
; TAB=4

; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述

        DB        0xeb, 0x4e, 0x90
        DB        "HELLOIPL"        ; ブートセクタの名前を自由に書いてよい(8バイト)
        DW        512                ; 1セクタの大きさ(512にしなければいけない)
        DB        1                ; クラスタの大きさ(1セクタにしなければいけない)
        DW        1                ; FATがどこから始まるか(普通は1セクタ目からにする)
        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        ; 改行を2つ
        DB        "hello, world"
        DB        0x0a            ; 改行
        DB        0

        RESB    0x1fe-$            ; 0x001feまでを0x00で埋める命令

        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

无语的是,关键部分的代码还是db 0x。。这种形式。也就是说,本质上没什么区别,只是用rest xxxx这样的汇编语句循环复杂了之前那么多的0。

 

记录下一些比较有用的信息:

1软盘的第一个扇区为启动区。

2计算机读软盘是以512字节为单位来读写,所以一个扇区为512字节。

3一张软盘有1440KB,2880个扇区。

4第一个扇区为启动区,IPL。加载操作系统用。

5启动区的结束标志为:55AA

 

以上是关于《30天自制操作系统》第一天的主要内容,如果未能解决你的问题,请参考以下文章

「七天自制PHP框架」第一天:路由与控制器

《30天自制操作系统》第二天

《30天自制操作系统》第9天

30天自制操作系统——第十七天制作命令行窗口

30天自制操作系统从计算机结构到汇编程序入门

Vue实战-第一天开发工具的使用