我正在尝试在程序集 8086 中创建一个动画,由键盘控制,使用 ctrl 和 shift 作为左右。
我试图看看如何在 8086 中从键盘接收输入,而不是如何找出按下的键是 ctrl 或 shift(通常是按下哪个键)。
非常感谢!
你确定你不会使用左右方向键吗?control 和 shift 的问题在于它们不会“返回”一个键,而是修改另一个被按下的键。这是在键盘中断处理程序(9,IIRC)中处理的,您可以“挂钩”它。我认为查看“Bios 数据区”并观察中断处理程序在何处跟踪控制和换档键的状态会更容易。在我看来,BDA 在第 40h 段。键盘状态标志在... 17h 和 18h?不要相信我的话,请查一下。拉尔夫布朗的中断清单。这一切都假设“8086”的意思是,比如……古物。:)
假设您仅在 BIOS 下执行此操作,您可能会发现使用更高级别的 BIOS 键盘中断更容易 - int 0x16 AH=0x01用于一般击键,而int 0x16 AH=0x02用于 ctrl/shift 等是可能的可能性,尽管还有许多其他可能性(包括其他 int 0x16 命令和 - 如之前所建议的 - 低级键盘 int 0x09 和 BIOS 数据区域。我强烈支持 Ralf Brown 的中断列表的推荐- 一个极好的资源!
Bios 将密钥存储在 16 个字母的缓冲区中。这意味着如果操作系统太慢,每当它读取下一个击键时,它都会从缓冲区中读取。
您可以使用 int 16h 并将 ah 设置为 02h 以将 al 设置为缓冲区中的下一个字符。但是,如果您正在检查缓冲区的状态(是否有密钥),请查看此内容。它基本上进入了更深入的 ah 02h
由于您要询问箭头键,因此这里是它们的十六进制代码: