問題タブ [ntvdm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - RET命令が原因の「NTVDM CPUが不正な命令に遭遇しました」
さて、ここで大きな問題が発生しました。このコードは機能するはずです。私が書いたのではなく、先生がくれたものです。2 つの文字列間の連結操作であり、さらに 2 つの proc があるため、コードは少し長くなりますが、これは別の proc から呼び出されない唯一の proc であるため、これを個別にデバッグしています。
ご覧のとおり、問題の場所を見つけるために行にコメントを付けています。問題はRET命令にあるという結論に達しました。プログラムは適切にリンクされていますが、実行すると、次の Windows ダイアログが表示されます。
「NTVDM CPU が不正な命令に遭遇しました。CS:0712 IP:0927 OP:ff 7f 00 00 00 アプリケーションを終了するには、[閉じる] を選択してください。」
コードはこの部分でうまく機能します。
それまで
次に、STRLEN 内でコメント化されていない唯一の命令は RET です。だからこそ、これが問題であると仮定します。
私はたくさん読んでいますが、まだ問題を見つけることができませんでした。
Web のどこかで、スタックが破損しているため、proc が「戻る」と、プロセッサが理解できない無効なメモリ アドレスに戻ると読んだことがあります。
誰かがこれで私を助けてくれたらいいのにと思います。どうすればいいのかわかりません。たくさん試しました。説明がわかりにくかったり、情報が不足していたりしたら、何でも聞いてください。どうもありがとうございました。
ところで、私は Windows XP Mode 32 ビットを実行しています。
java - Java 7 以降の Runtime.process が複数の同時 ntvdm を生成できないのはなぜですか?
Intel XEON CPU を使用した 32 ビット Windows Server 2007 Standard Service Pack 2 で実行されています。
私は、16 ビット ソフトウェアを実行しなければならないサーバー ソフトウェアを持つといううらやましい立場で働いています ... :)
そして、ソケットを介してローカルユーザーに16ビットプログラムを提供するサーバーがあります。
セットアップは次のとおりです。
Java サーバー プログラムは、「cmd.exe \C batchfile.bat」プロセスを開始します。その batchfile.bat で、実際の 16 ビット実行可能ファイル (すべての目的で pgm.exe) をセットアップして実行します。
次に、リクエストをリッスンし、必要に応じて別のリクエストを生成します。
現在、これは JVM 1.6 バージョンのランタイムを使用して完全に機能します。ただし、Java 7 および Java 8 では、batchfile.bat が実際に 16 ビット exe プログラムを開始しようとした瞬間にハングします。
TaskManager を使用すると、cmd.exe が並行して生成されていることがわかります。しかし、現在の cmd.exe が 16 ビット プログラムを離れる (ntvdm.exe が終了する) まで、次の cmd.exe はフリーズ (ロック?) し、16 ビット exe の実行で停止します。
手がかり?これらの Java バージョン間で何かが変更されており、それは私たちにとって完全な謎です。
では、なぜ Java 7 と Java 8 は、Runtime.Process を使用して 2 つのバッチファイルを同時に開始できず、バッチファイルが 16 ビット exe を呼び出したときにそれらを適切に実行できないのでしょうか?
windows - NTVDM での Sound Blaster エミュレーション: ダイレクト モードと MPU が期待どおりに動作しない
私は、現在リアル モードで x86 アセンブリ プログラミングを学んでいる学生の例として、サウンドを生成する小さなプログラムを作成しようとしています。DOSBox から実行するとサウンドの再生に成功しますが、NTVDM で実行すると失敗します (私は Windows XP のものを使用しています)。
いわゆるダイレクト モード (DSP リセットを実行) で Sound Blaster にアクセスしようとすると、同じ問題が発生します。NTVDM で確実に動作すると思われる唯一の DSP コマンドは 0xE1 で、DSP バージョン情報を取得します。
私が持っている、内蔵スピーカー以外のサウンドを生成するために使用する MS-DOS プログラムのほとんどは、NTVDM でも動作しません。喜んでそうするそれらのいくつかを除いて。
私は数年前に内部スピーカー出力で同様の問題を抱えていましたが、交換可能と思われるいくつかの初期化タスクを実行する順序が実際には重要であることが判明しました。しかし、今回は解決策が見つかりません。
ここに私が持っているコードのテストピースがあります(FASM構文):
その理由は何ですか?任意の提案をいただければ幸いです。