2016-03-06 73 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位代码。 –

相关问题