C/C++ プログラムからいくつかの DOS 割り込み (サービス) を呼び出す必要があるため、次のインライン asm コードを試しました: (Read a character)
int main()
{
asm(
"movb $0x01, %ah;"
"int $0x21"
);
system("PAUSE");
}
しかし、うまくいきませんでした!ここで何が間違っていたのか知りたいです!また、dos 割り込みを呼び出す別の方法がある場合も ! ありがとう !
DOSプログラムからのDOS割り込みのみを使用できるため、これを機能させるには、Visual C ++1.0や1.5などの非常に古いC++コンパイラ、または4.5や5.0などのTurbo C ++ / BorlandC++が必要です。次に、アセンブリコードを修正する必要があります。作成したものはAT&T構文のように見えますが、私が知っているすべてのDOSコンパイラはIntel構文を使用しています。それには1つの半例外があります:djgcc。これはDOSエクステンダの下で実行される古いバージョンのgccであるため、AT&T構文を使用し、DOSのような割り込みのセットを引き続きサポートします(ただし、実際にはDOSエクステンダを使用しており、DOS自体は使用していません)。
それでも、プログラムはDOSプログラムをサポートするシステムでのみ実行されます(MicrosoftはWindowsからそれをすぐに削除します-たとえば、Windowsのすべてのx64バージョンにはありません)。
DOSはかなり長い間廃止されているため、新しいコードを記述しても意味がありません。そのようなキーを読みたい場合は、Windowsプログラムを作成し、ReadConsoleInput
代わりに次のようなものを使用してください。
編集:さて、あなたが本当にこれをしたいのであれば、明白な方法はDOSエクステンダを選び、それにgccの現在のバージョンを移植することです。もう1つの可能性は、OpenWatcomやDigital Marsのように、まだ保守されており、DOSエクステンダに移植されているコンパイラを選択することです。
Windows XPでこのコードを実行するには、DOSBoxのようなx86エミュレータが必要になる場合があります。