1

サンプルからフロッピー ブート イメージを作成しました。

  1. すべての割り込みを無効にする
  2. リブート

ただし、bochs で起動すると、強制終了するまで 100% の CPU を消費します。

フロッピー イメージは次のとおりです。

$ hd フロッピー.img
00000000 fa f4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.|
00000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00168000

分解イメージ:

$ objdump -b バイナリ -D floppy.img -m i386

floppy.img: ファイル形式バイナリ


セクション .data の分解:

00000000 :
       0: ファクリ    
       1: f4 hlt    
    ...
     1fe: 55 プッシュ %ebp
     1ff: aa stos %al,%es:(%edi)

Bochs 出力(pastebin)。

bochsrc.txt:

romimage: ファイル=/usr/share/bochs/BIOS-bochs-latest, アドレス=0xe0000
vgaromimage: file=/usr/share/bochs/VGABIOS-lgpl-latest
フロッピー: 1_44=フロッピー.img、ステータス=挿入済み
ブート:
ログ: OSDev.log
マウス: 有効=0
メグ: 32
表示ライブラリ: sdl

私はこの方法でbochsを実行します:

ただし、bochs で起動すると、強制終了するまで 100% の CPU を消費します。

$ bochs -f bochsrc.txt

Bochs バージョン: 2.4.6-4、ubuntu 12.04 i686 で実行。

私は何を間違っていますか?

4

2 に答える 2

1

CLI は NMI (マスク可能な割り込みではない) を無効にしないため、次のコードの方が優れています。

.loop:
    cli
    hlt
    jmp .loop

Bochs が 100% の CPU 負荷を与える理由は明らかではありません。この負荷をどのようにチェックしていますか?実際の CPU 負荷によるものですか、それとも Bochs には独自の仮想 CPU 負荷インジケーターがありますか?

QEMU などの別の仮想マシンで試すことをお勧めします。

したがって、上記のコードは起動してからスリープします。コンピューターを再起動することが目的の場合は、次のコードでコールド リスタートを実行する必要があります。

    jmp $ffff:$0000

ウォーム リスタートの場合:

    mov  [$472], 1234h
    jmp  $ffff:$0000
于 2013-09-02T06:30:47.540 に答える