2010-09-01 143 views
2

我剛剛決定開始學習裝配,所以我開始使用FASMW進行16位裝配。 HOwever,我最近得到了一臺運行Windows 7 64位的新電腦,現在沒有一個編譯好的.COM文件可以再次安裝。他們會提供一條錯誤消息,指出.COM與64位窗口不兼容。 32位程序集仍然可以工作,但是我寧願從16開始,一路順風...... 可以在Windows 7上運行16位程序嗎?還是有特定的方法來編譯它們?或者我應該放棄並跳到32位?64位Windows上的16位程序集?

+5

您可以隨時爲目標環境運行虛擬機。 – 2010-09-01 17:37:30

+0

程序集是_processor_特定的。你在用什麼處理器?你在用什麼處理器? – Oded 2010-09-01 17:38:22

+2

像Windows Virtual PC這樣的虛擬機。但是這個問題無論如何都是誤導的,因爲沒有16位的工作。 64位模式比32位更簡單和相似,不需要專門學習後者。更多的位!=更難 – jbcreix 2010-09-08 10:07:54

回答

6

不能使用16位程序集的原因是因爲所有64位版本的Windows中的16-bit subsystemhas been removed

解決此問題的唯一方法是安裝類似DOSBox或VirtualBox等虛擬機軟件包,然後將FreeDOS安裝到該軟件中。這樣,無論如何你都會得到真正的DOS。 (NTVDM is not true DOS

個人而言,我會鼓勵爲DOS編寫16位程序集嗎?不,我會使用32位甚至64位的程序集 - 原因是不同的操作系統有不同的函數調用(稱爲ABI)。因此,64位Linux應用程序的ABI與32位應用程序不同。不確定這是Windows的情況。但是,我保證中斷的含義可能不同。另外,你已經有了16位程序集要考慮的各種事情,比如正在使用的內存模型。我可能是錯的,但我相信DOS給你64K的內存來玩「就是這樣」。正如我所理解的,所有的東西,你的整個堆和堆棧以及代碼都必須適合這個空間,這讓你想知道如何運作,真的。

+0

爲了讓你思考64K內存是否足夠,你應該檢查demoscene - > http://www.demoscene.info/ – Esko 2010-09-01 18:03:10

+0

不準確(但不是你的錯)。它已被刪除,因爲它在長時間模式下無法正常工作。 http://en.wikipedia.org/wiki/Long_mode – 2010-09-01 18:04:04

+0

有趣的是,我沒有意識到這是它被刪除的原因,我只知道它已被微軟分類。就我而言,這不是一個壞的舉動,我們真的不應該再使用WOW64了。 – 2010-09-01 18:07:52

5

我的建議是隻寫32位代碼。雖然最初看起來學習如何編寫16位代碼,然後「畢業」到32位代碼是有意義的,但實際上我認爲情況恰恰相反:編寫32位代碼實際上更容易因爲相當多的任意體系結構約束(例如,你可以用作基址寄存器)基本上都不在32位代碼中。

對於這個問題,我認爲它是開放的問題是否真的有理由編寫16位x86代碼。對於大多數實際用途而言,這是一個死板 - 對於臺式機來說,認爲已經過時,對於嵌入式機器,您更有可能看到諸如ARM或Microchip PIC之類的東西。除非你有一個特定的目標,並且確定它將會是一個16位的x86,否則我可能會忘記它存在,就像世界上其他大多數人一樣。

+0

+1,我想提到嵌入式,但從彙編的角度來看,我不太瞭解它。那麼說r.e.學習曲線。 – 2010-09-01 18:06:05