0

ブートローダーについて調べています。つまり、VB (vdi ディスク) で実行される Nasm を使用して単純なブートローダーを作成しようとしています。今のところ、テスト目的で仮想ボックス環境をセットアップし、絶対アドレス (HXD 16 進エディター) 0x2000 に存在する MBR を正常にロードしました。しかし今、私は MBR (0x2200 ビッグ エンディアン) の外に飛び出し、そこにあるコードを実行したいと考えています (以下のスニペットは仕事をしません)。Nasm ディレクティブ [org 0x7C00] を使用していますが、ジャンプを行うときにこのオフセットを使用する必要がありますか?

[BITS 16]
[org 0x7C00]

%define location 0x0022

start:

    mov al, 0x12
    mov ah, 0
    int 0x10

    jmp location:0000

TIMES 510 - ($ - $$) db 0
DW 0xAA55

これは vdi からの 16 進ビューです (2000h は MBR の開始場所、2200h はジャンプしたい場所です):

六角ビュー

4

1 に答える 1

2

ブート セクタはアドレス 0x7c00 にロードされます (リアル モード セグメントの特殊性により、複数の方法でアドレス指定される場合があります。一般的な 2 つの方法は 0:0x7c00 と 0x7c0:0 です。特定の方法に依存するべきではありません)。 )。ディスク イメージのオフセット 0x2000 にあるという事実は、おそらくそのイメージのフォーマットによるものであり、メモリ アドレスとは関係ありません。また、ブート プロセスは 512 バイトの単一セクターのみをロードします。さらに必要な場合は、自分でロードする必要があります。次に、ロードしたアドレスを使用してジャンプできます。

于 2012-11-07T22:15:24.263 に答える