检查MS-DOS(C/C++)中的键是否关闭

前端之家收集整理的这篇文章主要介绍了检查MS-DOS(C/C++)中的键是否关闭前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是的,我的意思是真正的MS-DOS,而不是 Windows的cmd.exe shell控制台.

有没有办法检查MS-DOS中的键是否关闭,类似于WinAPI中的GetAsyncKeyState()函数

目前我使用的是kbhit()和getch(),但它真的很慢,第一个字符之后有延迟,同时不允许多个键等.

我正在使用Turbo C 3.1.谁能帮忙?

(顺便说一下,不要问为什么我在这样一个古老的系统上编码我的游戏)

你为什么在su编码你的游戏只是开玩笑!

在MS-DOS中,“API”功能实现为中断服务器.在x86汇编语言中,您可以使用INT instruction并指定要执行的中断号.大多数中断要求在执行INT之前在某些寄存器中设置它们的“参数”.在INT指令将控制权返回给代码之后,其结果将被放置在由中断调用文档定义的某些寄存器和/或标志中.

我不知道Turbo C如何实现中断,因为我参与了编程,但我知道它允许你执行它们. Google的语法,或检查您的Turbo C文档.

知道这些中断将会让您在寻找解决方案时获得90%的收益. Ralf Brown compiled and published a famous list of DOS and BIOS interrupt codes.他们也应该在任何关于DOS编程的书中提供 – 如果你认真对待编程,你一定要考虑把手放在一起.亚马逊上使用的副本只能让你回来几块钱.大多数人认为现在这些毫无价值.

Here是列出可用于DOS中断21h的子功能站点.与您的使用相关的是01,06,07和08.这些基本上是C标准库函数像getch将要做的事情.我觉得很难想象,但是我听到有程序员回头说,直接调用DOS中断的速度更快.我问的原因是,我无法想象运行时库实现者本来会如此愚蠢的提供不必要的缓慢的实现.但也许他们是.

如果DOS中断对你来说还是太慢,最后一个方法就是直接使用BIOS中断.这可能会使速度有明显的差异,因为您绕过每个可能的抽象层.但它确实使您的程序显着更少的可移植性,这是操作系统像DOS提供这些更高级别的函数调用开始的原因.再次检查Ralf Brown列出的与您使用相关的中断.例如INT 16 with the 01h sub-function.

猜你在找的Windows相关文章