作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」
bochs2.4.1のフォルダを見ると、bochsdgb.exeというデバッガーがあります。
ダブルクックして起動、そして、コンフィグレーションをロードしスタートします。
すると
・Bochs for Windows - Display
・Bochs for Windows - Console
という2つの画面が起動されます。
例えば、コンフィグレーションでChapter2のサンプルをスタートするようにしておいて、「Bochs for Windows - Console」のプロンプトで
<bochs:1>pbreak 0x07C00
<bochs:2>c
と打てば、boot.asmの先頭でブレークしてくれます。そこから、ステップ実行する場合は
<bochs:3>s
と打てば良いようです。
詳しくはここにデバッガの使い方があります。
追記
デバッガについてはここにもわかりやすい解説があります。
また、bochs 2.4.1の設定はこちらを参照してください。
2009年9月27日日曜日
2009年9月24日木曜日
2009年9月20日日曜日
ページングサンプル動作せず
作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」
ページングのサンプルコード(Chapter8)がNASM2.07とbochs2.4.1の組み合わせではどうにも動作しません。著者の指定しているNASM、bochsのバージョンでは動作するのでしょうか?
狙いは良い本ですし、構成も良いと思うのですが、細かい誤植・誤りが本当に多いですね。ある章ではiretを使い、別の章ではiretdを使う。また、ある章ではeaxを使うが、別の章ではecxを使う。一貫性についてももう少しなんとかなるような。下記URLにも良い指摘がありますので、皆さんも参考にされるのが良いと思います。
http://d.hatena.ne.jp/dogatana/20090609/1244553689
ページングのサンプルコード(Chapter8)がNASM2.07とbochs2.4.1の組み合わせではどうにも動作しません。著者の指定しているNASM、bochsのバージョンでは動作するのでしょうか?
狙いは良い本ですし、構成も良いと思うのですが、細かい誤植・誤りが本当に多いですね。ある章ではiretを使い、別の章ではiretdを使う。また、ある章ではeaxを使うが、別の章ではecxを使う。一貫性についてももう少しなんとかなるような。下記URLにも良い指摘がありますので、皆さんも参考にされるのが良いと思います。
http://d.hatena.ne.jp/dogatana/20090609/1244553689
2009年9月13日日曜日
ユーザモードタスクの実行サンプル
作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」
引き続きbochs2.4.1でサンプルコードの動作確認中ですが、Chapter7のkernel_5_User_Task.asmも表示されるはずの文字列が表示されません。
pp.219でisr_128_soft_intはEAXを媒介変数として使うため、PUSHして値(座標値)を臨時に保存しておきPOPすると言ってますが、実際のコードを見ると、そうなってませんね。というわけで
push eax ;; 追加
mov ax, SysDataSelector
mov DS, ax
mov ES, ax
mov FS, ax
mov GS, ax
pop eax ;; 追加
というふうに2行追加したら、ちゃんと表示されました。
引き続きbochs2.4.1でサンプルコードの動作確認中ですが、Chapter7のkernel_5_User_Task.asmも表示されるはずの文字列が表示されません。
pp.219でisr_128_soft_intはEAXを媒介変数として使うため、PUSHして値(座標値)を臨時に保存しておきPOPすると言ってますが、実際のコードを見ると、そうなってませんね。というわけで
push eax ;; 追加
mov ax, SysDataSelector
mov DS, ax
mov ES, ax
mov FS, ax
mov GS, ax
pop eax ;; 追加
というふうに2行追加したら、ちゃんと表示されました。
2009年9月12日土曜日
キーボード割り込みハンドラサンプルコード
作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」
引き続きbochs2.4.1でサンプルコードの動作確認をしていましたが、Chapter4のkernel3.asmがエラーなく動いているにも関わらず、表示されるはずの文字列が表示されない。
良く見てみると printfの中に
mov byte [es:edi], 0x0 ;; 本文 pp.119
と書いてあるではありませんか
mov byte [es:edi], 0x06
に変更したら、ちゃんと表示されました。
引き続きbochs2.4.1でサンプルコードの動作確認をしていましたが、Chapter4のkernel3.asmがエラーなく動いているにも関わらず、表示されるはずの文字列が表示されない。
良く見てみると printfの中に
mov byte [es:edi], 0x0 ;; 本文 pp.119
と書いてあるではありませんか
mov byte [es:edi], 0x06
に変更したら、ちゃんと表示されました。
2009年9月6日日曜日
Bochs 2.4.1の設定
「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」でBochs 2.4.1
Bochs 2.4.1を起動すると、スタートメニューが表れます。
「Disk & Boot」を選択して「Edit」ボタンを押すと、フロッピーとカーネルイメージを選択する画面が表れます。
「Memory」を選択して「Edit」ボタンを押すと、ROM BIOSイメージとVGA BIOSイメージを選択する画面が表れます。
「Browse」ボタンで起動したいカーネルイメージを選択してください。このほかの設定はこの例の通りです。
「OK」ボタンを押してスタートメニューに戻り、設定を「Save」ボタンで保存してください。再びBochsを起動した場合は、「Load」ボタンで設定をロードしてください。
Bochs 2.4.1を起動すると、スタートメニューが表れます。
「Disk & Boot」を選択して「Edit」ボタンを押すと、フロッピーとカーネルイメージを選択する画面が表れます。
「Memory」を選択して「Edit」ボタンを押すと、ROM BIOSイメージとVGA BIOSイメージを選択する画面が表れます。
「Browse」ボタンで起動したいカーネルイメージを選択してください。このほかの設定はこの例の通りです。
「OK」ボタンを押してスタートメニューに戻り、設定を「Save」ボタンで保存してください。再びBochsを起動した場合は、「Load」ボタンで設定をロードしてください。
NASM version 2.07が原因でした
「作りながら学ぶOSカーネル―保護モードプログラミングの基本と実践 ~ 金 凡峻」
サンプルコードがBochs 2.4.1で動かない、とお伝えしましたが、動きました。Bochsのバージョンの問題ではなかったようです。
boot.asmの中で実行してる
jmp $+2
nop
nop
をNASM version 2.07でコンパイルすると、とんでもないところへジャンプしていたようです。良く読むと、著者はversion 0.99.06を使うよう言ってます。version 2.07とはjmp命令の仕様が異なるようです。
ちなみに、NASM version 2.07では
jmp short flush
flush:
nop
nop
と書きかえることで動作するようになります。Bochs 2.4.1はコンフィグレーションがGUIで設定できBochs 2.3.7より便利です。
サンプルコードがBochs 2.4.1で動かない、とお伝えしましたが、動きました。Bochsのバージョンの問題ではなかったようです。
boot.asmの中で実行してる
jmp $+2
nop
nop
をNASM version 2.07でコンパイルすると、とんでもないところへジャンプしていたようです。良く読むと、著者はversion 0.99.06を使うよう言ってます。version 2.07とはjmp命令の仕様が異なるようです。
ちなみに、NASM version 2.07では
jmp short flush
flush:
nop
nop
と書きかえることで動作するようになります。Bochs 2.4.1はコンフィグレーションがGUIで設定できBochs 2.3.7より便利です。
登録:
投稿 (Atom)