如何在装配中获得用户输入

问题描述 投票:0回答:2

我想将用户输入的号码输入寄存器。这是我自己的操作系统。所以,我不能使用这个:

mov al,0x01
int 0x21
mov dl,al ;move the integer entered by the user, into dl

因为int 0x21调用ms-dos。那我该用什么插话?

assembly x86 osdev
2个回答
1
投票

如果以实模式在“常规” PC上运行,则可以将int 0x10用于屏幕输出,将int 0x16用于键盘输入,将int 0x13(功能AH = 2、3、8、0x41、0x42、0x43)用于磁盘访问。

在“ Ralph Brown's interrupt list”中很好地记录了常规PC上的大多数中断(在Google中搜索该列表)。


3
投票

取决于您的操作系统提供的内容。如果是您的操作系统,则可以使用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中断处理程序获取数据到键盘控制器,然后(并单独缓冲)。

© www.soinside.com 2019 - 2024. All rights reserved.