0

int 21h を使用してシステム コールを行う MS-DOS 用の Hello, World プログラムがあります。

mov dx,hello
mov ah,9
int 0x21
mov ah,0
int 0x21

"hello" は、文字列 'hello, world',13,10,'$' のアドレスです。

プログラムは動作します。

ただし、(最初の) "int 0x21" を "call 5" に置き換えると、プログラムがコンピューター (つまり、PTS-DOS を実行している VirtualBox 仮想マシン) をクラッシュさせます。DOSbox では、単純に終了してコマンド プロンプトに戻ります。

アドレスと請求番号に異なるレジスタを使用してみましたが、常に同じ結果が得られました。

今、私は疑問に思っています...

  1. それ以降のバージョンの DOS は、CP/M 互換性コール 5 インターフェイスをサポートしなくなりましたか?
  2. PTS-DOS と DOSbox の DOS は call 5 をサポートしていませんか?
  3. インターフェイスの使い方が間違っていますか?
  4. 最初にセグメント レジスタを設定する必要がありますか? (すべてのセグメントレジスタをゼロに設定してみました。)

何か案は?

更新:ドキュメントに従って正しいため、回答を受け入れました。それでも動作しませんが、DOS のバージョンまたはその他の問題が原因である可能性があります。

4

3 に答える 3

1

古い「CALL 5」インターフェイスが DOSBox で動作するとは思えません。これは、ゲームで使用されるものをエミュレートしようとするだけであり、MS-DOS ゲームで使用されていない可能性が非常に高いためです。このあいまいなインターフェイスは、CP/M プログラムを MS-DOS に簡単に移植できるようにするためだけに存在しています。同様に、他のエミュレートされた環境や MS-DOS クローンで動作しなくても、実際には必要ないので驚かないでしょう。

このような難解なものを使用しようとしている場合は、実際のバージョンの MS-DOS を使用する必要があります。また、VirtualBox のような VM でさえ、人々が実際に使用するプログラムが必要としないものを除外するため、実際の PC を使用する必要がある場合があります。

ただし、実際の PC 上の実際の MS-DOS でも、CALL 5 互換インターフェイスを使用する場合、いくつかの制限があります。

  • コメントでMichealが指摘したように、関数番号はAHではなくCLにロードする必要があります。
  • CS は PSP を指している必要があります。つまり、.COM プログラムでのみ動作することを意味していました。.EXE 形式の実行可能ファイルは、.COM ファイルのように動作するようにセットアップする必要があります。
  • A20 ラインを有効にする HIMEM.SYS などをロードすることはできません。PSP:0005 の far jump 命令は、実際の 8086 CPU の 1MB アドレス ラップに依存しています。PSP:0006 の far アドレスの下位ワードは、CP/M 互換性のために PSP セグメントに割り当てられたスペースの量に設定されます。これは、far アドレスが通常 F01D:FEF0 のようなものであるため、0000:00C0 (INT 30 ベクトル) にジャンプし、実際の MS-DOS エントリ ポイントにジャンプすることを意味します。
  • DEBUG を使用してプログラムを実行することはできません。MS-DOS 2 以降に含まれるすべてのバージョンの DEBUG には、PSP に間違ったアドレスを入れるというバグがあります。
  • 関数番号が 24h 以下の古い MS-DOS 1.x 関数のみを使用できます。
于 2016-10-09T22:52:08.787 に答える
0

CP/M の "call 5" が機能するのを実際に見たバージョンの DOS はありますか? 私は DOS 2.1 から始めましたが、1.1 用のコードをいくつか書きました。CP/M との互換性は FCB にしか見られませんでした。もちろん、私はそれを明示的に探していたわけではありませんが、「call 5」が誰かによってサポートされていると報告された覚えはありません...

ファローアップ:

最新の PSP 定義 (Web にリストされているため、YMMV) には、実際に「call 5」インターフェイスがサポートされています。真の DOS 互換環境であれば、それをサポートする必要があります。

于 2013-05-21T12:03:30.810 に答える