3

BIOS 割り込み関数 21h (ah = 1h) は、標準入力から文字を読み取り、それをエコーする必要があります。

私の読み取り機能:

    mov ah, 1h
    int 21h

そのため、キーを押すとそれが認識されますが、文字はエコーされません。コードを使用してフロッピーと文字エコー関数 int 10h (ah = 0eh) から起動するので、それを保存してから「ビデオ - テレタイプ出力」(int 10h (ah = 0eh) )))。

または、aboce コードで何かを見逃しましたか?

4

2 に答える 2

2

割り込み 0x21 は、BIOS ではなく、MSDOS のような OS 機能への「インターフェイス」です。

リアルモード ブートローダまたは小さな OS カーネルを作成している場合は、独自の IRQ 1 ハンドラを使用する必要があります。

独自のメモリ バッファーですべてのキー押下をキャプチャする方法については、この回答を参照してください: x86 アセンブリでキーの状態を確認する方法は?

次に、ある種のループを配置する必要があります。キーが押されたかどうかを確認します (メモリ バッファーを読み取ることにより)。キー押下が検出されたら、「エコーされた」キーを出力するには、ビデオ メモリに何かを書き込む必要があります。それはまた別の話です。デフォルトのテキスト モードを使用している場合は、0xB800 セグメントに書き込むだけです。グラフィック モード (VGA または VESA) を使用している場合は、どこかからラスター フォントを取得する必要があります。

ブートローダ レベルでアセンブリに記述している場合、利用できるものはあまりありません。絶対にありませんint 0x21

于 2012-09-17T22:57:38.923 に答える
1

あなたは基本的に2つの異なることをしています:

  1. キーボードから文字を取得する
  2. 画面に表示する

2 つの異なる BIOS 割り込みが関係していましたが、幸運なことに、どちらも AL で同じ値を使用していました。

mov ah,0h   ;get character from keyboard
int 16h     ;and store it in AL
mov ah,0eh  ;Display a character in AL
int 10h     ;aka, echo it

INT 21h は MSDOS のものであり、ブートローダーについて話している場合、これはあり得ません。

于 2014-01-27T17:09:09.010 に答える