ページ 11

【アセンブラ】VWware Playerで動かない

Posted: 2013年9月19日(木) 23:11
by みけCAT
Windows Vista Home Premium SP2 32ビット
Intel(R) Core(TM)2 Duo T8100 @2.10GHz 2.10GHz
RAM 4.00GB

gcc 4.7.2
自作開発補助ツール(このトピックと共通)

フロッピーディスクのブートセクタで実行し、同ディスクのルートにあるBOOT.BINを読み込んで実行するプログラムを書いたのですが、
試した中でVMware Playerでだけうまく動かなくて困っています。

添付ファイルの中にあるvmwtest.imgをフロッピーディスクとして読み込み、
VirtualBox 4.2.18、QEMU 0.13.0、VMware Player 6.0.0で起動しました。
仮想マシンのRAMは全て256MBに設定しています。
VirtualBoxとQEMUではきちんとHello, World!と表示されたのですが、
VMware Playerでは「err0(改行)0」と表示され、うまく実行できませんでした。

ブートローダーのプログラムはこれです。(添付loader.s)
► スポイラーを表示
BOOT.BINに置くプログラムも一応載せます。(添付helloworld.s)
► スポイラーを表示
ファイルの読み込みエラーだとしても、想定する動作では2行目に数字が出力されるということは無いはずなので、
メモリ破壊やサブルーチンの呼び出し前後で%spの値がずれるなどのバグがあるかもしれません。
しかし、ソースコードを読み返しても発見できませんでした。

もし原因が分かりましたら、教えていただければありがたいです。
よろしくお願いします。

【追記】
Bochs 2.6.2でもHello, World!と表示されました。

【さらに追記】
http://www.geocities.co.jp/SiliconValle ... toiso.html
のツールでisoファイルに変換し、QEMUで動作確認したあと実機(FMV-BIBLO NF/B50)でテストしましたが、
「err0(改行)0」が大量に出力されました。これはVMware Playerでisoイメージを使った時と同じ挙動(もちろん失敗)です。

Re: 【アセンブラ】VWware Playerで動かない

Posted: 2013年9月20日(金) 14:53
by みけCAT
調べていると、VMware Playerや実機では%dsの初期値が0ではなく0x40であることがわかりました。
そこで、プログラムの最初で%dsを0にすると、
VMware Player(FDおよびCD)、実機(CD)全てBOOT.BINを読み込んで実行することができました。

ただし、VMware Player 6.0.0の起動があまりにも遅かったので、VMware Player 4.0.6を使っています。

BOOT.BINを読み込んで実行するプログラムの改良版
► スポイラーを表示
起動時のレジスタの値を表示するプログラム(ブートローダーの領域に書き込んで使う)
► スポイラーを表示