簡體   English   中英

Dosbox 是模擬 32 位環境還是 16 位環境?

[英]Does Dosbox emulate a 32bit enviroment or a 16bit environment?

Wiki 說它是一個 x86 模擬器。 那么,如果 DosBox 確實是 32 位應用程序的模擬器,為了支持 16 位應用程序,它必須有另一個模擬器,對嗎? 讓它在 16 位模式下運行?(這不是常規操作系統(不是模擬器)的工作方式嗎?)所以基本上我和某人有過這個爭論,他說當 turbo cpp 編譯時它會生成 16 位代碼,但是當你在 dosbox 上運行它就像一個 32 位應用程序,是真的嗎? 以及 int 變量的大小如何變化? 是固定的嗎? 像 16 位的 2 個字節和 32 位的 4 個字節?

因此,如果 DosBox 確實是 32 位應用程序的模擬器

那是相當不精確的。 它是 DOS 模擬器,而 DOS(它的接口部分和服務(在 dosbox 中的實現通常在主機端,根本不在模擬硬件中運行))在 16 位實模式端。 但它模擬 80386 硬件(實際上它也模擬了 80486 和 80586 的某些部分,但 80386 盡可能接近“完整”,因為它很實用)。 所以任何 DOS 應用程序(以實模式啟動)都可以將 CPU 切換到保護模式,這就是許多 DOS 應用程序所做的,通常使用某種常見的擴展器,如 DOS4GW 等...... dosbox 確實模擬了足夠的機器以使大部分經典軟件工作,但如果你是刻薄的,你可以輕松地創建 DOS 應用程序,該應用程序可以在真實硬件上運行但在 dosbox 中失敗,因為在仿真中缺少一些功能。

所以它模擬了 80386 的實模式和保護模式(順便說一下,你如何在模式之間切換 80386,你可能會得到不太常見的配置,有時被稱為“非真實模式”/等......我無法從我的頭,如果這些在 dosbox 中被准確地模擬,但我認為它的大部分工作“足夠好”以運行舊的 DOS SW)。

所以基本上我和某人有過這個爭論,他說當 turbo cpp 編譯時它會生成 16 位代碼,但是當你在 dosbox 上運行它時,它的行為就像一個 32 位應用程序,是真的嗎?

不,Borland 的 Turbo C 確實只生成 16 位實模式機器代碼,並且由它生成的可執行文件在實模式下運行(除非有人通過實現切換到保護模式並將其用於部分應用程序代碼而竭盡全力,但是此類代碼必須由不同的編譯器編譯,或用匯編語言編寫,因為 Turbo C 沒有對 32 位保護模式的本機支持 - 至少在我知道的版本中沒有)。

以及 int 變量的大小如何變化?

那是編譯時的事情,取決於編譯器。

雖然,如果您在 32b 保護模式下意外運行 16b 實模式機器代碼,那么像xor ax,ax這樣最瑣碎的代碼片段實際上將在 32b 模式下作為xor eax,eax ,反之亦然( xor eax,eax編譯對於實模式,如果意外地在保護模式下運行,將結束作為xor ax,ax )。 所以在這方面,代碼可能會因為混淆而做一些 16b 操作而不是 32b 操作,但是對於任何非平凡的代碼,它很可能在很少的指令中遇到一些更大的差異,這可能會使它以更有趣的方式崩潰.

關於 dosbox 的好處:dosbox 作者多次拒絕讓模擬更准確,並表示他的目標是讓 dosbox 完美適用於那個時代的軟件,即他的重點是確保舊軟件能夠像縮進一樣工作,甚至可以故意針對仿真中的小缺陷或差距。 這就是為什么創建新的 DOS SW 很“容易”的原因,該軟件在 dosbox 中無法正常工作。 原來的dosbox項目有多個fork,更關心硬件仿真的准確性,而不是舊軟件的可用性(有時提高仿真精度可能會破壞舊軟件,如果仿真還沒有完全完善,但現在它有不同的缺陷.. .)

(來自評論)所以基本上,如果我要在 DosBox 中執行一個 16 位 exe 文件,它會像在 16 位環境中一樣運行,而在 32 位 exe 中就像在 32 位環境中一樣運行,對嗎?

沒有 32 位 DOS exe 這樣的東西。 像 DOOM 這樣的游戲確實在 32b 模式下運行,但 exe 以 16 位模式啟動,然后它自己處理開關(例如 DOOM 確實使用了 DOS4GW 擴展器,就像那個時代的許多其他游戲一樣,這通常表明app 的主要代碼是用 C 編寫的,並用 Watcom 編譯器編譯)。 我可以理解為什么有人會稱此類可執行文件為“32 位”,如果您知道他們正在切換到保護模式並使用它,但從技術上講,可執行文件的第一條指令以 16 位實模式開始,就像每個 DOS 可執行文件一樣。

Dosbox 模擬 32 位 x86 CPU。 該 CPU,無論是真實的還是模擬的,都能夠運行 16 位代碼,以便向后兼容同一系列中較早的 16 位 CPU。 在 Dosbox 中運行 16 位游戲與在真正的 80386 PC(也是 32 位機器)上運行它本質上是一樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM