最近、単純な MSDOS ゲームをコーディングするのは面白いだろうと決心しました。言うまでもなく、キーボード イベントを処理するためのコードが必要です。
これは私がテストのために思いついたものです:
int i, c = 0;
for ( i = 0; i < 10; i++ )
{
asm
(
"mov $0x00, %%ah \n"
"mov $0x00, %%al \n"
"int $0x16 \n"
//"jnz keydn \n"
//"mov $0x00, %%al \n"
//"keydn: \n"
"movw %%ax, (%0) \n"
: "=r"(c)
);
printf( "%d\n", c & 0xFF );
}
コードは、キーが押されるのを待ってから、文字の ASCII 値を出力することになっています。backspaceまたはのようなキーを押さない限り、すべてが期待どおりに機能しますesc-その後、セグメンテーション違反が発生します。
私はアセンブリに慣れていませんが、実際にこのエラーの原因がわかりません。
でコンパイルしdjgpp
、実行可能ファイルを実行しますDosBox
すべては、ここで提供される情報に基づいています。
- https://courses.engr.illinois.edu/ece390/books/artofasm/CH20/CH20-3.html
- https://en.wikipedia.org/wiki/BIOS_interrupt_call
前もって感謝します!:)