我想将用户输入的号码输入寄存器。这是我自己的操作系统。所以,我不能使用这个:
mov al,0x01
int 0x21
mov dl,al ;move the integer entered by the user, into dl
因为int 0x21调用ms-dos。那我该用什么插话?
如果以实模式在“常规” PC上运行,则可以将int 0x10用于屏幕输出,将int 0x16用于键盘输入,将int 0x13(功能AH = 2、3、8、0x41、0x42、0x43)用于磁盘访问。
在“ Ralph Brown's interrupt list”中很好地记录了常规PC上的大多数中断(在Google中搜索该列表)。
取决于您的操作系统提供的内容。如果是您的操作系统,则可以使用you写。
可能性包括检查键盘控制器或串行端口,具体取决于所需的输入。如果您的操作系统在8086实模式下运行,则可以向BIOS询问,否则,您需要执行直接端口I / O。
如果要对BIOS进行编程,请检查RBIL。实际上,无论您做什么,都要检查一下。
[如果您想直接与KBC(键盘控制器)或UART(串行端口控制器)对话,我建议您查看其他操作系统的工作方式,并阅读例如osdev.org和OSdev Wiki。
如果您处于实模式,则可以调用BIOS以等待按键并从键盘缓冲区读取它:
MOV AH,00h
INT 16h
ASCII码在AL
中,而扫描码在AH
中。但是,如果您不在“实模式”下,那么就没有键盘缓冲区。键盘驱动程序将通过直接端口I / O从KBC中断处理程序获取数据到键盘控制器,然后(并单独缓冲)。