2016-03-06 63 views
-1

所以我在TASM中寫彙編代碼。但是現在我想將它遷移到MASM並讓它在32位Windows上運行。我是否仍然可以保留DOS中斷,或者有其他方法可以做到這一點?如何在32位Windows程序集中使用DOS中斷?

我想在Windows上運行的理想這10

+1

如果您打算創建真正的Win32應用程序(支持控制檯或GUI),或者您是否打算在Windows 10上運行16位DOS程序,那麼知道什麼是重要的。對此問題的答案將決定當然你不得不考慮。 –

+0

我想創建可在沒有模擬器或DOSBOX的情況下在Windows中運行的應用程序。 – Ashara

+1

這是否包括在Windows操作系統的32位變體上模擬DOS/BIOS例程的16位NTVDM子系統?如果您不希望使用32位Windows操作系統提供的仿真層,那麼您將不得不編寫16位程序(這意味着要消除您習慣的DOS/BIOS調用)。網上有很多關於使用MASM爲Win32編寫彙編代碼的教程。 Google是你的朋友。 –

回答

0

16從Windows 95位的代碼仍然可以在32位Windows上運行至少要等到Windows 7的(我沒有軟件來嘗試在Windows 10 )。

但是,對於32位和64位代碼,您必須開始使用win32 api,它使用不太令人興奮的「調用」指令而不是中斷。

+0

因此,使用TASM生成的32位代碼也不起作用? – Ashara

+0

@Ashara:如果TASM可以組裝32位代碼,那麼確定你可以用它做任何事情。您仍然必須將您的代碼從DOS的int 21h系統調用API移植到您要在其下運行的系統的系統調用API。對於相同的API,這不僅僅是一個不同的ABI;這是什麼系統調用可用的真正改變。你可能想要直接移植到64位,而不會打擾做一個32位版本。 IDK與32位和64位之間的Windows系統調用相似。 –

+1

@PeterCordes:由於兼容性的原因,MS爲了直接生成'syscalls'而被不贊同。首選機制是通過構成Win32 API的user32.dll,kernel32.dll,gdi32.dll等系統DLL間接進行調用。 –

0

簡單的回答:沒有。在Win32/Win64下,調用DOS中斷將使程序崩潰,並顯示「無效操作」消息。找出你想用DOS中斷做什麼(控制檯輸出?寫入文件?),找到相應的Win32 API函數,然後調用它們。

更新:取決於你以後是什麼。 DOS中斷僅適用於DOS可執行文件; Windows可執行文件必須使用Windows API。完全可以使用匯編語言製作Windows可執行文件,包括MASM,但您必須學習新技術。舊版MASM支持構建DOS可執行文件,但在當今的計算環境中,該技能集毫無意義。首先,DOS子系統慢慢地,但肯定會遠離Windows - 64位版本的Windows不再有它。

+0

不完全正確。在X86/WIn32系統上,NTVDM將執行許多16位DOS程序。大多數(不是全部)的DOS/BIOS中斷都被支持。不是那些通常會危害安全性的東西。 –

+0

OP之後的MASM不再能夠生成DOS可執行文件。 –

+0

其實他沒有說哪個版本的MASM。 MASM 6.14/6.15不僅能夠生成16位代碼。 –

相關問題