6

計算機を実行できるオペレーティングシステム用にコーディングする必要があります。これはデスクトップ計算機のようなものです。このために私はブートローダーの第2段階を完了した壊れたとげのオペレーティング開発シリーズを読んでいますブートローダーはリアルモードです。この後、作者はプロテクトモードについて説明しています。プロテクトモードは使いたくない。そのための時間がありません。したがって、BIOS割り込みを使用して、リアルモードで計算機を記述したいと思います。出来ますか?ブートローダーの第2ステージで記述できると思います(わかりません)。つまり、カーネルを使用する必要がない(わかりません)。BIOS割り込みを使用してキーボードを処理する方法がわかりません。誰かが私にこれで私を助けるリンクを提供できますか?そして、私が上で仮定したwhatevetの何かが間違っているなら、私を訂正してください。よろしくお願いします。

4

3 に答える 3

10

キーボード割り込みを自分で処理するのではなく、高レベルのBIOSキーボードサービスを使用したい場合は、それINT 16hが必要です。

INT 16hキーが押されるのを待つAH=00hか、ブロックします(ASCII結果を返します); ブロッキングを回避したい場合は、またはを使用して、最初にキー押下が使用可能かどうかを照会します(キーが使用可能な場合はクリアですぐに戻り、使用できない場合は設定します)。たとえば、ここ、またはここ(または詳細についてはGoogleの「INT16h」)を参照してください。10hALAH=01h11hZF

于 2010-11-06T15:02:15.433 に答える
5

IRQ 1(x86コントローラーによって割り込み9にマップされます)を処理し、ポートからキーを読み取ることができます60h

http://inglorion.net/documents/tutorials/x86ostut/keyboard/を参照してください。

于 2010-11-06T13:24:43.140 に答える
3

最小限のGASブートセクターBIOSの例

文字を入力すると、画面に印刷されます。

main.S

.code16
.global _start
_start:
cli

/* Set SS and SP as they may get used by BIOS calls. */
xor %ax, %ax
mov %ax, %ss
mov $0x0000, %sp

/* Get input to %al */
mov $0x00, %ah
int $0x16

/* Print the input from %al */
mov $0x0E, %ah
int $0x10

hlt

.org 510
.word 0xaa55

コンパイルして実行します。

as -o main.o main.S
ld --oformat binary -o main.img -Ttext 0x7C00 main.o
qemu-system-i386 -hda main.img

GitHubアップストリーム

Ubuntu 14.04 AMD64、Binutils 2.24、QEMU 2.0.0、および実際のハードウェアLenovoThinkpadT400でテスト済み。

于 2015-09-20T17:55:20.567 に答える