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 では、単純に終了してコマンド プロンプトに戻ります。
アドレスと請求番号に異なるレジスタを使用してみましたが、常に同じ結果が得られました。
今、私は疑問に思っています...
- それ以降のバージョンの DOS は、CP/M 互換性コール 5 インターフェイスをサポートしなくなりましたか?
- PTS-DOS と DOSbox の DOS は call 5 をサポートしていませんか?
- インターフェイスの使い方が間違っていますか?
- 最初にセグメント レジスタを設定する必要がありますか? (すべてのセグメントレジスタをゼロに設定してみました。)
何か案は?
更新:ドキュメントに従って正しいため、回答を受け入れました。それでも動作しませんが、DOS のバージョンまたはその他の問題が原因である可能性があります。