为什么使用" int 21h"在汇编x86 MASM导致我的程序崩溃?

时间:2014-03-19 16:38:00

标签: assembly x86 masm

我试图让我的程序接受输入,而无需用户输入,所以我尝试了以下内容:

mov ah,01h
int 21h

但它只是在未处理的异常上崩溃我的程序。根据我所阅读的内容,这似乎是这样做的方式,那么为什么它不适合我呢?

现在,我对这种语言还比较陌生,所以我仍然不完全理解这段代码如何工作的过程,所以我也很欣赏在没有用户的情况下按Enter和接受输入接受输入的逻辑必须按回车键。

顺便说一下,我的操作系统是Windows。

3 个答案:

答案 0 :(得分:6)

您的代码看起来像MS-DOS时代的程序集。 VS2010不支持生成DOS可执行文件,现代版本的Windows也不支持运行它们。看起来你要去一些旧书或网站,一个写于80年代后期 - 90年代早期的书。

决定你想学什么。如果您想学习现代程序集(以及目标Windows),请获取最新指导。技术是完全不同的,int21h不在其中:)如果你确实在DOS时代的程序集之后,用DOSBox设置一个DOS虚拟机,并找到一些旧的免费汇编程序。 Visual Studio在这里不会帮到你。

具体为什么你的程序会崩溃。 Int21h是MS-DOS如何暴露其API。 Windows不支持Windows可执行文件 - 还有其他调用API的方法。当您使用Visual Studio 2010进行组装时,您最终得到的是Windows可执行文件,而不是DOS可执行文件,并且没有选项可以生成DOS文件。至于Windows可执行文件,他们根本不应该调用中断 - 这是一个崩溃的情况。

答案 1 :(得分:0)

您需要获取可生成16个MS-DOS程序的工具集。这些应该在DOSBOX上运行,或者在安装了MS-DOS的Virtual PC上运行。 Microsoft包括16位工具集到Visual C / C ++ 1.52,但Visual C / C ++ 4.0和4.1也包含1.52 16位工具集。旧版本的编译器将命名为Microsoft C 8.xx或更早版本。我不知道Visual Studio(2002或2003)的早期版本是否包含16位工具集。

答案 2 :(得分:0)

使用链接器版本5.60生成16位DOS应用程序。你可以从这个: http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe

德克