0

BIOSビデオ割り込みを使用して、画面にキャラクターを表示しようとしています。アセンブリ コードは次のとおりです。

mov $0x0A, %AH
mov $0x68, %AL ; to display character 'h'
int $0x10

GNU アセンブラーを使用してこのコードをアセンブルし、sample.o というオブジェクト ファイルを生成しました。sample.o の合計サイズは 449 バイトです。ここで、起動可能にするために、このオブジェクト ファイルの 511 番目と 512 番目のバイト位置に 16 進数の 0x55 と 0xAA を手動で書き込みます。だから私は今、512バイトのブートセクターを持っていると信じています。qemu を使用して、このオブジェクト ファイルからの起動を試みます。

$> qemu -fda sample.o

qemuエミュレーターが起動し、「フロッピーから起動中...」と表示された時点でフリーズしますが、ブートセクターを検出した後、BIOSビデオ割り込みコードが実行され、画面に文字が表示されるはずだと思いました。

私はひどく間違ったことをしていることを知っています。たぶん、割り込みの概念全体が欠けています。誰でも助けることができます。

編集:だから私は今 as86 と ld86 を使用してフラット バイナリだけを生成しています。そして、AH の 0x0A の代わりに 0x0E を使用していますが、うまくいったようです。BIOSの実装の問題のようです。

返信してくれたすべての人に感謝します。

ありがとう

4

3 に答える 3

3

通常の.oファイルには、結果のバイナリコード以外にもかなりの量が含まれているため、実行していることが機能しないのは当然です(この結果は約10バイト程度になるはずです)。

ldのスクリプトを記述して、フラットなバイナリを生成することができます(これは可能であると思われますが、個人的には試していません)。これを行う場合は、生のバイナリ出力を非常に簡単に生成できるため、代わりにnasmを使用する可能性があります。もう1つの可能性は、フォーマット出力を生成できる古いMS-DOSアセンブラ.comです(ロードが少し異なるため、注意が必要ですが、これも生のバイナリです)。

于 2010-06-24T23:55:41.533 に答える
0

属性値をBL(07hは黒地に灰色)、ページ番号をBH、カウントをCXで渡す必要があります。

あなたはそれをガスでコンパイルし、それはあなたに448バイトのファイルを与えたと言いますか?ELFファイルなどにアセンブルしていますか?BITS 16ディレクティブを使用して、nasm-fbinをお勧めします。

于 2010-06-24T23:53:26.663 に答える
0

Jerry Coffin が言ったように、問題は.oファイルが適切なブート セクタを持つフロッピー イメージではないことです。この.oファイルには、シンボル名や再配置情報など、コード以外の多くの情報が含まれています。

NASM を使用-f binしている場合は、未加工のバイナリを生成するために使用します。LD を使用している場合は、リンカー スクリプトを記述できます。

この種のヘルプについては、おそらくosdev.orgとそのフォーラムが最適です。

于 2010-06-25T00:29:29.203 に答える