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

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

时间:2016-03-28 21:26:43      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

一开始作者搞了一个装满二进制的文件,用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天自制操作系统》第一天

标签:

原文地址:http://www.cnblogs.com/rixiang/p/5330427.html

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