1

数年前、私は MS-DOS オペレーティング システム用の x86 アセンブリ プログラムを作成していました。それらのほとんどは、Windows CMD.EXE コマンド プロセッサで変更されずに実行されます。私の質問は、これらのプログラムの 2 つの具体的なポイントについてです。

  • プログラム パラメータは、プログラム セグメント プレフィックスのオフセット 81H にあり、最大長は 127 文字です。

  • プログラムが返す ERRORLEVEL 値は、INT 21H のプログラム終了関数 (4CH) の前に AL レジスタにロードされるため、0 ~ 255 の範囲の値に制限されます。

Windows XP では、DOS ウィンドウで実行されるコマンドは、最大 8 KB のサイズのパラメーターを処理でき、32 ビットの符号付き値を ERRORLEVEL として返す場合があることに気付きました。私の質問は:古いスタイルの MS-DOS アセンブリ プログラムが 8KB のパラメータにアクセスして 32 ビットの ERRORLEVEL 値を返す簡単な方法はありますか?

はい、Windows 準拠のアセンブリ プログラムがこれらの機能にアクセスできることは知っていますが、プログラムが非常に簡単な方法でそれを行うことができるかどうかは疑問です...

4

1 に答える 1

0

NTVDMが原因で、16 ビット プログラムが 32 ビット Windows で実行されています。ますます多くのマシンがデフォルトで 64 ビット OS を取得しており、64 ビット Windows には NTVDM さえないため、もはや機能しません。

プログラムを 32 ビットまたは 64 ビットの Windows に移植することをお勧めします。

移植後、コマンドラインへのアクセスは簡単です。WinMain と main はどちらも引数としてコマンド ラインを持ちます。

于 2012-07-28T23:11:38.533 に答える