我剛剛決定開始學習裝配,所以我開始使用FASMW進行16位裝配。 HOwever,我最近得到了一臺運行Windows 7 64位的新電腦,現在沒有一個編譯好的.COM文件可以再次安裝。他們會提供一條錯誤消息,指出.COM與64位窗口不兼容。 32位程序集仍然可以工作,但是我寧願從16開始,一路順風...... 可以在Windows 7上運行16位程序嗎?還是有特定的方法來編譯它們?或者我應該放棄並跳到32位?64位Windows上的16位程序集?
回答
不能使用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的內存來玩「就是這樣」。正如我所理解的,所有的東西,你的整個堆和堆棧以及代碼都必須適合這個空間,這讓你想知道如何運作,真的。
爲了讓你思考64K內存是否足夠,你應該檢查demoscene - > http://www.demoscene.info/ – Esko 2010-09-01 18:03:10
不準確(但不是你的錯)。它已被刪除,因爲它在長時間模式下無法正常工作。 http://en.wikipedia.org/wiki/Long_mode – 2010-09-01 18:04:04
有趣的是,我沒有意識到這是它被刪除的原因,我只知道它已被微軟分類。就我而言,這不是一個壞的舉動,我們真的不應該再使用WOW64了。 – 2010-09-01 18:07:52
我的建議是隻寫32位代碼。雖然最初看起來學習如何編寫16位代碼,然後「畢業」到32位代碼是有意義的,但實際上我認爲情況恰恰相反:編寫32位代碼實際上更容易因爲相當多的任意體系結構約束(例如,你可以用作基址寄存器)基本上都不在32位代碼中。
對於這個問題,我認爲它是開放的問題是否真的有理由編寫16位x86代碼。對於大多數實際用途而言,這是一個死板 - 對於臺式機來說,認爲已經過時,對於嵌入式機器,您更有可能看到諸如ARM或Microchip PIC之類的東西。除非你有一個特定的目標,並且確定它將會是一個16位的x86,否則我可能會忘記它存在,就像世界上其他大多數人一樣。
+1,我想提到嵌入式,但從彙編的角度來看,我不太瞭解它。那麼說r.e.學習曲線。 – 2010-09-01 18:06:05
- 1. 64位程序集的32位指令
- 2. 32位/ 64位Windows/Linux應用程序
- 3. 運行16位命令行應用程序的64位
- 4. 在一個Windows安裝程序中的32位和64位程序集
- 5. WiX:阻止32位安裝程序在64位Windows上運行
- 6. Haskell 32位程序在64位Windows上凍結
- 7. Windows 7上的System.Data.OracleClient 64位
- 8. Windows上的SWT 64位
- 9. 64位Windows上的OpenSSL
- 10. Windows上的Perl:32位或64位?
- 11. 64位Windows 2008上的32位cluster.exe
- 12. 無符號16位和64位整數
- 13. 在32位程序中使用64位驅動程序。 Windows
- 14. 端口32位Windows驅動程序到64位Windows
- 15. PowerBuilder 10.5應用程序在Windows XP 32位到Windows 7 64位
- 16. 在32/64位系統上使用16位指針的C++
- 17. 64位Windows IFilterSample
- 18. 在64位Windows
- 19. 程序集和Visual C++ Express 64位
- 20. 在ARM程序集64位SOS
- 21. MSCAL.OCX不適用於Windows 10(64位)上的MS Access 2010(64位)
- 22. 16位的int VS 32位的int和64位INT
- 23. 64位操作系統上的32位或64位應用程序?
- 24. 64位Java應用程序:是64位操作系統,64位JRE和64位應用程序嗎?
- 25. 我在x86-64 PC上運行32位Windows。我應該下載32位還是64位的Python安裝程序?
- 26. 使用64位與32位程序集的.NET版本
- 27. 64位Windows服務器上的WCF自託管應用程序
- 28. Windows 7 64位上的Sybase ASE 15.x ODBC驅動程序
- 29. 在64位Windows上的USB驅動程序
- 30. 在Windows 7 64位上安裝Oracle 10g(Win 64位)失敗
您可以隨時爲目標環境運行虛擬機。 – 2010-09-01 17:37:30
程序集是_processor_特定的。你在用什麼處理器?你在用什麼處理器? – Oded 2010-09-01 17:38:22
像Windows Virtual PC這樣的虛擬機。但是這個問題無論如何都是誤導的,因爲沒有16位的工作。 64位模式比32位更簡單和相似,不需要專門學習後者。更多的位!=更難 – jbcreix 2010-09-08 10:07:54