なぜDOSの.COMファイルをロードした後0xFFFEというのSPレジスタを設定していますか?

Nadder:

.COMについてwikpediaページ上のファイルhttps://en.wikipedia.org/wiki/COM_fileそれが読み取ります。

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

しかし、これは実際には、セグメントのトップの下に一つの単語を開始するためにスタックを設定します。スタックに値をプッシュするときCPUは0xFFFCにSPをデクリメントし、従って、セグメントの上部ワードを浪費、そこに値を格納します。DOSではなく0にSPを設定しない理由は何ですか?

CherryDT:

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

CP / Mでは、あなたは、単に使用してプログラムから返すことができますretし、あなたのプログラムが正常に終了します。これは持っていることによって達成された0x0000スタックの最上部に、そして有するint 20hアドレスの命令を0x0000にもかかわらずint 20h、プログラムを終了するにはDOS」公式の方法で、使用してプログラムを終了するためのオプションは、call 0CP / Mから維持し、最も外側のスコープは、retそれが返されますので、同様に同じ動作をします0

その持っているために0x0000、スタックの最上部にある単語を、あなたは明らかに、さらに下のバイト使用可能なスタック2を起動する必要があります。だからこそ、SP当初である0xFFFEことを指し、0x0000これにターンポイントのワードint 20h命令。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=370103&siteId=1