[英]How to get user input in assembly
我想将用户输入的号码存入寄存器。 这是我自己的操作系统。 所以,我不能使用这个:
mov al,0x01
int 0x21
mov dl,al ;move the integer entered by the user, into dl
因为 int 0x21 调用 ms-dos。 那么我可以使用什么interuppt呢?
取决于您的操作系统提供什么。 如果是您的操作系统,则可以使用您编写的任何内容。
可能性包括检查键盘控制器或串行端口,具体取决于您想要的输入。 如果您的操作系统在 8086 实模式下运行,您可以向 BIOS 询问这些,否则您需要进行直接端口 I/O。
如果要对 BIOS 进行编程,请检查RBIL 。 事实上,无论你做什么,都要检查它。
如果您想直接与 KBC(键盘控制器)或 UART(串行端口控制器)交谈,我建议您查看其他操作系统的工作方式并阅读 osdev.org 和 OSdev Wiki 上的文档。
如果您处于实模式,那么您可以调用 BIOS 以等待按键并从键盘缓冲区中读取它:
MOV AH,00h
INT 16h
ASCII 码在AL
,扫描码在AH
。 但是,如果您不在实模式下,则开始时没有键盘缓冲区。 键盘驱动程序将通过直接端口 I/O 将数据从 KBC 中断处理程序获取到键盘控制器,然后(并自行缓冲)。
如果您在实模式下在“常规”PC 上运行,您可以使用 int 0x10 进行屏幕输出,使用 int 0x16 进行键盘输入,使用 int 0x13(函数 AH=2、3、8、0x41、0x42、0x43)进行磁盘访问。
普通 PC 上的大多数中断都在“ Ralph Brown 的中断列表”(在 Google 中搜索该列表)中得到了很好的记录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.