2

C/C++ プログラムからいくつかの DOS 割り込み (サービス) を呼び出す必要があるため、次のインライン asm コードを試しました: (Read a character)

int main()
{
asm(
 "movb $0x01, %ah;"
 "int $0x21"
 );
system("PAUSE");
}

しかし、うまくいきませんでした!ここで何が間違っていたのか知​​りたいです!また、dos 割り込みを呼び出す別の方法がある場合も ! ありがとう !

4

2 に答える 2

8

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つの可能性は、OpenWatcomDigital Marsのように、まだ保守されており、DOSエクステンダに移植されているコンパイラを選択することです。

于 2010-04-26T19:52:40.170 に答える
0

Windows XPでこのコードを実行するには、DOSBoxのようなx86エミュレータが必要になる場合があります。

于 2010-04-26T20:38:54.927 に答える