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

时间:2013-12-27 16:30:03

标签: assembly x86 osdev

我希望将用户输入的数字输入到寄存器中。这是我自己的操作系统。所以,我不能用这个:

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

因为int 0x21 calles ms-dos。那么我可以使用什么interuppt?

2 个答案:

答案 0 :(得分:3)

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

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

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

如果您想直接与KBC(键盘控制器)或UART(串口控制器)对话,我建议您查看其他操作系统如何进行操作并阅读文档,例如: osdev.org和OSdev Wiki。

如果您处于实模式,那么您可以调用BIOS等待按键并从键盘缓冲区中读取它:

MOV AH,00h
INT 16h

ASCII码位于AL,扫描码位于AH。但是如果你没有处于实模式,那么就没有键盘缓冲区了。键盘驱动程序会通过直接端口I / O从KBC中断处理程序获取数据到键盘控制器,然后(和缓冲区本身)。

答案 1 :(得分:1)

如果您在实际模式下在“常规”PC上运行,您可以使用int 0x10进行屏幕输出,使用int 0x16进行键盘输入,使用int 0x13(函数AH = 2,3,8,0x41,0x42,0x43)磁盘访问。

普通PC上的大多数中断在“Ralph Brown的中断列表”(在Google中搜索该列表)中都有很好的记录。