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

问题描述 投票:0回答:3

我试图让我的程序接受输入,而无需用户按 Enter 键,所以我尝试了以下操作:

mov ah,01h
int 21h

但它只是因为“未处理的异常”而导致我的程序崩溃。根据我读过的很多内容,这似乎是这样做的方法,那么为什么它对我不起作用呢? 现在,我对这种语言相当陌生,所以我仍然不完全理解这段代码的工作过程,所以我也很欣赏通过按 Enter 接受输入并接受输入而不需要用户的背后的逻辑是什么按回车键。

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

windows assembly x86 dos masm
3个回答
12
投票

决定你想学什么。如果您想学习现代汇编(并针对 Windows),请获取一些最新的指导。技术是完全不同的,int21h 不在其中:) 如果您确实在 DOS 时代的汇编之后,使用

DOSBox

设置 DOS 虚拟机,并找到一些旧的免费汇编器。 Visual Studio 2010 在这里无法为您提供帮助。生成 16 位可执行文件的 Visual C++ 的最新版本是 v1.5x。 具体为什么你的程序会崩溃。 Int21h 是 MS-DOS 公开其应用程序接口 (API) 的方式。 Windows 不支持 Windows 可执行文件 - 还有其他调用 API 的方法。当您使用 Visual Studio 2010 进行汇编时,您最终会得到一个 Windows 可执行文件,而不是 DOS 可执行文件,并且没有生成 DOS 可执行文件的选项。至于 Windows 可执行文件,它们根本不应该调用中断 - 这是崩溃情况。


1
投票


0
投票
http://download.microsoft.com/download/vc15/Update/1/WIN98/EN-US/Lnk563.exe

德克

© www.soinside.com 2019 - 2024. All rights reserved.