アットウィキロゴ

Chapter 3

■メモ

 さあ本当のIPLを作ろう

  • IPL(初期プログラムローダ)
  • JC (jump if carry) → キャリーフラグが1だったらジャンプしなさい   

 

  • ディスクからの読み込み、ディスクへの書き込み、セクタのベリファイ、およびシーク
    • AH = 0x02; (読み込み時)
    • AH = 0x03; (書き込み時)
    • AH = 0x04; (ベリファイ時)
    • AH = 0x0c; (シーク時)
    • AL = 処理するセクタ数; (連続したセクタを処理できる)
    • CH = シリンダ番号 & 0xff;
    • CL = セクタ番号(bit0-5) | (シリンダ番号 & 0x300) >> 2;
    • DH = ヘッド番号;
    • DL = ドライブ番号;
    • ES:BX = バッファアドレス; (ベリファイ時、シーク時にはこれは参照しない)
    • 戻り値 :
    • FLAGS.CF == 0 : エラーなし、 AH == 0
    • FLAGS.CF == 1 : エラーあり、 AHにエラーコード(リセットファンクションと同じ)
  • FLAGC.CF → キャリーフラグのこと。1ビットしか解釈できないレジスタで、CPUには穂kあにもいくつかこのような1ビットしか記憶できないレジスタを持っている。こういうレジスタのことを「フラグ」という。

C言語

bootpack.c

bootpack.cをを機械語にする方法
  • cc1.exeを使って、bootpack.cからbootpack.gasを作る
  • gas2nask.exeを使って、bootpack.gasからbootpack.nasを作る
  • nask.exeを使って、bootpack.nasからbootpack.objを作る
  • obj2bim.exeを使って、bootpack.binからbootpack.hrbを作る
  • これで機械語になったので、copyコマンドでasmhead.binとbootpack.hrnをくっつけて、haribote.sysをする
解説:
  •  cc1 → cコンパイラで、C言語のプログラムからアセンブラのソースプログラムを作ってくれる
  • cコンパイラは、gccというコンパイラを改造したもの
  • gccというコンパイラはgasという名のアセンブラを前提にしているので、gas用のソースプログラムを出力してしまう。これはnaskでは翻訳できないので、naskで翻訳できる文法に変換する。それが、gas2nask。(意味は、gas to nask。gasファイルをnaskファイルへ変換するプログラムだよって意味)
  • naskでアセンブルすれば機械語になるので、あとはnaskを使ってobjファイルを作る。(objは、object(目的)のこと)
  • オブジェクトファイルは、他のオブジェクトファイルとくっつける(これを「リンクする」という)ための特別な機械語ファイル。C言語だけではプログラム全体を書くことができないので、一部はアセンブラで書いた部分とくっつけなければならないってこと。一人前の機械語にしてやるためには、必要なオブジェクトファイルを全部くっつけてやればいい。それをやるのが、「obj2bim」。(bimは「binary image」という意味)
  • bimは、2進数のイメージファイルなので、「本来の状態ではない仮の形式」。これは全部くっつけて機械語としてまとめただけで、実際に使うためには、それぞれのOSが必要とする系s機に合わせて加工しなければいけない。
  •  

 とにかくHLTしたい

 naskfunc.nas

 

 

■わからないこと

  •  Chapter 2で記述されていなかった部分がなくても、実行できたのはなぜ?
最終更新:2013年02月06日 18:11
添付ファイル