2015-10-20 35 views
-1

在這個article我們可以看到,16位系統有不同的內存模型。MS-DOS,什麼決定了內存模型選擇

通過那個answer我們知道COM應用程序總是使用Tiny Model(所有段都在同一個段中),但是對於其他可執行文件,操作系統使用哪種模型還是另一個模型?

我沒有在MS-DOS頭看到任何標誌,這將有助於爲選擇那麼,如何MS-DOS決定了內存模型使用?

+0

我不明白 - 你的問題是你舉的答案完全回答。 DOS使用COM格式的可執行文件的平面內存模型,並在檢測到EXE格式時使用分段內存模型。它就是這樣。即使你的問題標題幾乎完全相同。 –

+0

的可能的複製(http://stackoverflow.com/questions/9778425/what-determines-the-memory-model) –

+0

也許你沒看過[這](HTTP [什麼決定了內存模型?]://計算器.com/questions/9778425/what-determine-the-memory-model#comment12449647_9778511)comment?基本上,文件結尾決定了DOS的功能。 –

回答

2

內存模型的選擇是必要的,因爲編譯器選項,而不是OS相關。您可以假設DOS始終與大內存模型(CS和DS的遠指針)一起使用。

+0

因此,從您的回答中我可以得知,內存模型更多地是編譯器爲OpCodes生成的內容的「人類可讀視圖」,而不是操作系統/處理器內在的東西? 如果是這樣的話怎麼做處理器知道它應該還是用'遠東Pointer'或'近Pointer'當程序需要訪問內存? –

+0

'near'指針假定段號已經在段寄存器中(CS代碼,DS代表數據)。通過'far'指針,你可以用段號明確地加載'DS','ES','FS'等,並進行內存訪問操作。從操作系統的角度來說,段寄存器總是必須被加載,例如調用一個程序(DOS在段0x1234中的地址0x0100處加載它,然後遠程調用到1234:0100)。程序的數據段也是如此 - DOS程序沒有(或很少)使用像當前操作系統數據段一樣的段。換句話說,DOS必須加載'DS'寄存器。 – i486

+0

PS:'far'調用或'far'數據指針像全局地址,'near'指針是DOS程序的本地指針。如果程序使用大量的數據,它使用相應的內存模型,其中所有數據指針都是「遠」(即更多的字節進行編碼,執行速度較慢,但​​內存超過64K)。 – i486

相關問題