如何在程序集中获取用户输入

Isa*_*hen 2 x86 assembly osdev

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

mov al,0x01
int 0x21
mov dl,al ;move the integer entered by the user, into dl
Run Code Online (Sandbox Code Playgroud)

因为 int 0x21 调用 ms-dos。那么我可以使用什么中断呢?

mir*_*los 5

取决于您的操作系统提供的内容。如果这是您的操作系统,您可以使用编写的任何内容。

\n\n

可能性包括检查键盘控制器或串行端口,具体取决于您想要的输入。如果您的操作系统运行在 8086 实模式下,您可以向 BIOS 询问这些信息,否则您需要进行直接端口 I/O。

\n\n

如果要对 BIOS 进行编程,请检查RBIL。事实上,无论你做什么,都要检查一下。

\n\n

如果您想直接与 KBC(键盘控制器)或 UART(串行端口控制器)对话,我建议您了解其他操作系统是如何做到这一点的,并阅读 osdev.org 和 OSdev Wiki 等上的文档。

\n\n

如果你\xe2\x80\x99处于实模式,那么你可以调用BIOS来等待按键并从键盘缓冲区读取它:

\n\n
MOV AH,00h\nINT 16h\n
Run Code Online (Sandbox Code Playgroud)\n\n

ASCII 码在 中AL,扫描码在 中AH。但如果您\xe2\x80\x99 不在实模式下,则一开始就没有键盘缓冲区。键盘驱动程序将通过直接端口 I/O 从 KBC 中断处理程序获取数据到键盘控制器,然后(并自行缓冲)。

\n