9

Bochsを8086エミュレーターとして使用したいと思います。これを行う簡単な方法はありますか?私が欲しいのはemu8086(http://www.emu8086.com/)のようなものです。

4

3 に答える 3

5
sudo apt-get install bochs bochs-sdl

printf 'ata0-master: type=disk, path="main.img", mode=flat, cylinders=1, heads=1, spt=1
boot: disk
display_library: sdl
megs: 128
' > .bochsrc

bochs -q

Ubuntu 14.04、Bochs 2.4.6 で 512 バイト長のブート セクターで動作しmain.imgました。

  • cylinders=1, heads=1, spt=1ディスクサイズを指定し、イメージと一致する必要があります! ここでは1、1 シリンダーを意味するようにすべてを設定します。これは、イメージ ファイルのように 512 バイトです。
  • display_library: sdlUbuntu のパッケージングのバグが原因で必要になる場合があります

main.imgmain.asmから生成されました:

org 0x7c00
bits 16
cli
mov ax, 0x0E61
int 0x10
hlt
times 510 - ($-$$) db 0
dw 0xaa55

それで:

nasm -f bin -o main.img main.asm

このイメージは、BIOS を使用して 1 文字aを画面に出力します。

.bochsrc次のコマンド ラインを使用して、ファイルの作成を回避することができます。

bochs \
    -qf /dev/null \
    'ata0-master: type=disk, path="main.img", mode=flat, cylinders=1, heads=1, spt=1' \
    'boot: disk' \
    'display_library: sdl' \
    'megs: 128'

その-qf /dev/null部分は醜いですが、メニュー画面を自動的にスキップすることができた唯一の方法です:

  • -qまたは-n常にそれを要求し、6後で実行するにはヒットする必要があります
  • -qn <(echo ...)も機能しましたが、Makefile で失敗する Bash 拡張機能を使用しています

QEMU のインターフェースの方が使い始めやすかったので、代わりに使用することをお勧めします。

この例を含む GitHub リポジトリ: https://github.com/cirosantilli/x86-bare-metal-examples/blob/cba0757990843f412b14dffad45467ad0034d286/Makefile#L33

于 2015-09-30T17:08:34.487 に答える
1

それはあなたが本当にやりたいことではありません。(まあ、そうかもしれませんが…)

基本的に、Bochs は x86 PC エミュレーターです。その上でマシンコードを実行するには、マシンコードを「ディスク」イメージに取得する必要があります。ディスク イメージは、ディスク (フロッピーまたはハード ドライブ) のような構造を持つファイルです。

PC には、ディスクのセクションを調べ、そこにマシン コードをロードして実行する特定のブート シーケンスがあります。こんな感じでOSが立ち上がります。

「hello world」をアセンブリで実行するには、率直に言って、OS を実行する OS がないため、BIOS 以外は何もないため、少し複雑になります。

したがって、これを追求したい場合は、趣味のオペレーティング システムに関する書籍やサイトを探し出し、ブートストラップ プロセスの仕組みなどを学びたいと思うでしょう。それ以外の場合は、DOS システムのようなもので作業し、COM ファイルを作成して、そこの。

于 2011-05-26T17:58:50.510 に答える