繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM