【发布时间】:2019-04-26 09:52:37
【问题描述】:
为了我的学习,我需要在asm上写一个程序,它会等到键盘按键被按下,然后打印它的扫描码和按键字符的ASCII码。
我知道 BIOS 的 int 16h 可以完成这项工作,但我现在使用的是 Linux,找不到合适的模拟系统调用。
我应该用什么来完成这项任务?我目前正在为我的汇编代码使用 Debian Stretch 和 NASM。
【问题讨论】:
-
这并不容易,因为键盘离您的程序有好几层抽象。对于控制台应用程序,最简单的方法是首先将终端设置为无缓冲模式,然后读取单个字符。这有点烦人,但在组装时是可行的。
-
另一种可能导致代码更简单但执行准备工作更复杂的方法是编写一个仅使用
int 16h(和其他适当的 BIOS 功能)的实模式程序,将其编译为一个独立的二进制文件,并将其安装在 PC 的引导加载程序(通常是 GRUB)可以找到并执行它的地方。为了进行测试,您可以运行虚拟 PC 并使用虚拟引导加载程序来运行您的二进制文件。 -
您也许可以为此使用“输入”子系统。见man input-events。
标签: linux assembly keyboard nasm scancodes