为什么每当我尝试使用中断时,我的masm32程序都会崩溃?

Cam*_*Cam 6 crash assembly interrupt low-level masm32

这是代码:

.386 ;target for maximum compatibility
.model small,stdcall ;model
.code
    main:
        int 20h
    END main
Run Code Online (Sandbox Code Playgroud)

结果:http://img705.imageshack.us/img705/3738/resultom.png

"test.exe已停止工作" - 当它到达中断时总是正确的.

这是我试图使用的中断.它应该简单地退出程序.我试过的其他人包括字符输入/输出等等.没有什么可行的.

我在Windows 7上,使用masm32和WinAsm IDE.

有很多很酷的东西似乎我应该可以用中断...然而,每当我尝试使用中断时它都会崩溃 - 总是以同样的方式.

这看起来很相关并且可能很有用:masm x86程序集中的DOS中断崩溃

......但我真的无法从中找到任何东西.

有什么建议?

小智 5

是的.这种性质的中断专门用于MS-DOS,因此在Windows ME和之前的版本中工作但除了DOS模拟器(command.com)之外不能在NT架构上工作.我不知道这是否还附带Windows 7 - 我知道Windows的x64版本默认没有它.

如果您正在编写Native NT Apps(如果您不知道它是什么,则不太可能这样做,但是如果您想了解一下在MSDN上查看Mark Russinovich的博客)这里有一个NT中断列表及其相应的功能:http://www.ctyme.com/intr/rb-4249.htm

除此之外,您想要在Win32 API中调用函数:http://msdn.microsoft.com/en-us/library/aa383749%28VS.85%29.aspx

编辑:在该代码示例中,您没有通过寄存器指定任何中断选项.哦,你可以让它工作,只要你组装DOS而不是Windows.如果您使用链接器,您可能会创建一个Windows PE可执行文件.但是,如果您使用64位Windows,正如我所说,请不要尝试.

您可以做的一件事是安装虚拟机系统,如VirtualBox或VMware,然后安装FreeDOS.它根本不应占用大量RAM,让你自由地试验汇编/ dos.