Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 汇编8086中的键盘输入_Assembly_Input_Keyboard_X86_X86 16 - Fatal编程技术网

Assembly 汇编8086中的键盘输入

Assembly 汇编8086中的键盘输入,assembly,input,keyboard,x86,x86-16,Assembly,Input,Keyboard,X86,X86 16,我试图在assembly 8086中创建一个动画,由键盘控制,使用ctrl和shift作为左键和右键 我试图在8086中查看如何从键盘接收输入,而不是如何找出按下的键是ctrl或shift(通常是哪个键被按下) 多谢各位 您确定不想使用左右箭头键吗?控制和换档的问题在于,它们不“返回”一个键,而是修改另一个按下的键。这是在键盘中断处理程序(9,IIRC)中处理的,您可以“钩住”它。我认为查看“Bios数据区”并观察中断处理程序跟踪控制键和移位键状态的位置会更容易。在我看来,BDA在第40h段。键

我试图在assembly 8086中创建一个动画,由键盘控制,使用ctrl和shift作为左键和右键

我试图在8086中查看如何从键盘接收输入,而不是如何找出按下的键是ctrl或shift(通常是哪个键被按下)


多谢各位

您确定不想使用左右箭头键吗?控制和换档的问题在于,它们不“返回”一个键,而是修改另一个按下的键。这是在键盘中断处理程序(9,IIRC)中处理的,您可以“钩住”它。我认为查看“Bios数据区”并观察中断处理程序跟踪控制键和移位键状态的位置会更容易。在我看来,BDA在第40h段。键盘状态标志位于。。。17小时和18小时?不要相信我的话,去查一下。拉尔夫·布朗的中断列表。这一切都假设“8086”意味着,像。。。古物。:)

假设您仅在BIOS下运行此操作,您可能会发现使用更高级别的BIOS键盘中断更容易-对于一般按键和ctrl/shift等都有可能,尽管还有许多其他可能性(包括其他int 0x16命令和(如之前所建议的)低级键盘int 0x09和BIOS数据区。我强烈支持这一建议-一个优秀的资源!

BIOS将按键存储在一个16个字母的缓冲区中。这意味着如果操作系统太慢,每当它读取下一个按键时,它都会从缓冲区中读取

您可以使用int 16h,将ah设置为02h,以将al设置为缓冲区中的下一个字符。但是,如果您正在检查缓冲区的状态(是否有键),请查看它基本上会深入到ah 02h

由于您询问的是箭头键,以下是它们的十六进制代码:

  • u0x18
  • D 0x19
  • L0x1b
  • R 0x1A

  • 这是在什么操作系统上运行的?嗨,谢谢!键没什么大不了的,我该如何使用左箭头键和右箭头键呢?谢谢!int 0x16 Ah=0x02只会给我标志,我该如何从用户那里获取输入本身?你应该能够查看int 0x16 Ah=0x01中的扫描和/或ASCII代码来告诉你这一点