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

use*_*981 -1 x86 assembly masm

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

mov ah,01h
int 21h
Run Code Online (Sandbox Code Playgroud)

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

现在,我对这种语言相当新,所以我仍然不完全理解这段代码如何工作的过程,所以我也很欣赏接受输入的逻辑是什么,无需用户按下输入和接受输入输入.

顺便说一句,我的操作系统是Windows.

Sev*_*yev 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可执行文件,他们根本不应该调用中断 - 这是一个崩溃的情况.