【问题标题】:assembly implementation for kbhit in linuxlinux中kbhit的汇编实现
【发布时间】:2010-10-19 09:06:30
【问题描述】:

我正在编写一个汇编游戏,我需要检查是否按下了某个键。 那么,kbhit 在 Linux 中是如何实现的呢?

谢谢。

【问题讨论】:

  • 视情况而定。你在为控制台编码吗?那么 Paul Rs 的回答可能会有所帮助。您是在 X11 还是 GL 中编写图形游戏?那么您可能需要查看 SDL 或 Xevents。
  • 你确定这是你想知道的吗?对于游戏,您可能想知道何时按下某个键以及何时释放。

标签: linux assembly nasm


【解决方案1】:

Google 在 C 中为 Linux 提供了一个 kbhit 实现:http://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html

你可以按原样编译并从你的汇编代码中调用它,或者如果你真的想要你可以将它转换为汇编。

【讨论】:

  • 我知道这是一个菜鸟问题,但是如何将 c 标准库与汇编一起使用?我的意思是,我不知道要链接哪些文件...
  • @Sason:可能最简单的事情就是拥有一个 C main(),例如在 main.c 中,它调用您的汇编程序的入口点。然后你可以构建这样的东西:gcc -Wall main.c my_game.S other_stuff.c some_other_stuff.S -o my_game.
  • 您也可以在 C 代码中打开 asm() 标记,即 asm("jmp label"),并在 asm() 代码中引用 C 代码中声明的变量。这可能非常有用。
  • 或者您可以将 -lc 传递给链接器。
【解决方案2】:

我假设您还想要关键版本。我还假设您在控制台上(对于 X,XKeyEvent 有足够的信息)。

首先,您必须将终端(即控制台)置于非规范或原始模式。如果您不这样做,您将看不到任何输入,直到输入中有行分隔符或 EOF。请参阅我对your previous question 的回复。

然后,要获得按键释放,您需要将键盘设置为 RAW 或 MEDIUMRAW 模式(这与终端原始模式无关,这是 Linux 和控制台特定的,请参阅 console_ioctl(4))。退出前不要忘记将键盘设置回原来的模式。

有一篇关于这个here的好文章。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多