如何使用内联汇编在 C/C++ 程序中调用 DOS 中断?

2024-03-28

我需要从 C/C++ 程序调用一些 DOS 中断(服务),我尝试了以下内联 asm 代码: (读一个字符)

int main()
{
asm(
 "movb $0x01, %ah;"
 "int $0x21"
 );
system("PAUSE");
}

但这没有用!我想知道我在这里做错了什么!另外如果有另一种方法来调用dos中断! 谢谢 !


您只能使用 DOS 程序中的 DOS 中断,因此要使其工作,您需要一个非常古老的 C++ 编译器,例如 Visual C++ 1.0 或 1.5,或者 Turbo C++/Borland C++ 到 4.5 或可能 5.0 之类的版本。然后你必须修复你的汇编代码——你写的看起来像 AT&T 语法,但我知道的所有 DOS 编译器都使用 Intel 语法。有一个半例外:djgcc。这是 gcc 的一个古老版本,在 DOS 扩展器下运行,因此它使用 AT&T 语法,并且仍然支持一组类似 DOS 的中断(尽管您实际上使用的是 DOS 扩展器,而不是 DOS 本身)。

即便如此,该程序也只能在支持 DOS 程序的系统上运行(微软正在迅速将其从 Windows 中删除——例如,它在所有 x64 版本的 Windows 中都不存在)。

DOS 已经过时太久了,为它编写新代码已经没有意义了。如果你想读取这样的密钥,请编写一个 Windows 程序,并使用类似的东西ReadConsoleInput http://msdn.microsoft.com/en-us/library/ms684961%28VS.85%29.aspx反而。

编辑:好吧,如果你真的想这样做,明显的方法是选择一个DOS扩展器 http://www.thefreecountry.com/programming/dosextenders.shtml并将当前版本的 gcc 移植到其中。另一种可能性是选择像这样的编译器开放沃特康 http://www.openwatcom.org/index.php/Main_Page or 数字火星 http://www.digitalmars.com/仍在维护并已移植到DOS扩展器 http://www.japheth.de/HX.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用内联汇编在 C/C++ 程序中调用 DOS 中断? 的相关文章

随机推荐