.COMファイルをロードした後、DOSがSPレジスタを0xFFFEに設定するのはなぜですか?


10

.COMファイルに関するwikpediaページhttps://en.wikipedia.org/wiki/COM_fileには次のように記載されています。

DOSの.COMファイルは、すべてのx86セグメントレジスタを同じ値に設定し、SP(スタックポインタ)レジスタを0xFFFEに設定するため、スタックはメモリセグメントの最上部から始まり、そこから下に向かって動作します。

しかし、これは実際にはスタックをセグメントの先頭の1ワード下から開始するように設定します。スタックに値をプッシュすると、CPUはSPを0xFFFCにデクリメントしてそこに値を格納するため、セグメントのトップワードが無駄になります。DOSがSPを代わりに0に設定しない理由は何ですか?


6
DOSはint 20hそこに命令へのポインタを格納しているため、命令を発行してプログラムを終了できますret
fuz

回答:


16

これはCP / Mとの互換性のためです。

CP / Mでは、使用するプログラムから単純に戻ることができret、プログラムは正常に終了します。これは0x0000、スタックの一番上にa を置き、int 20haddressに命令を置くことで実現されました0x0000int 20hDOSがプログラムを終了する公式の方法であるにもかかわらず、使用してプログラムを終了するオプションcall 0はCP / Mから保持されており、一番外側のスコープretもに戻るため、同様に機能します0

0x0000スタックの一番上にその単語を置くには、使用可能なスタックを2バイトさらに下に開始する必要があります。そのためSP、最初はにあり0xFFFE、その0x0000単語を指しており、その単語がint 20h指示を指しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.