BIOS中断函数21h(ah = 1h)应从标准输入读取字符并回显。
我的读取函数:
mov ah, 1h
int 21h
所以,如果我按下一个键,它会识别到,但不会回显字符。由于我正在使用我的代码从软盘引导它和字符回显功能int 10h(ah = 0eh),我认为我必须将其存储,然后使用“视频-电传输出”(int 10h(ah = 0eh))回显它。
或者我在上面的代码中漏掉了什么?
中断0x21是指向类似MSDOS的操作系统函数的“接口”,而不是BIOS。
如果您正在编写实模式引导程序或小型操作系统内核,必须使用自己的IRQ 1处理程序。
查看此答案以了解在自己的内存缓冲区中捕获所有按键的方法: 如何在x86汇编中检查键的状态?
然后,您将不得不安排某种类型的循环。通过读取内存缓冲区检查按键是否被按下。一旦检测到按键按下,要打印“回显”的按键,您需要向视频内存写入内容。这是另一个故事。如果使用默认文本模式,请写入0xB800段。如果使用图形模式(VGA或VESA),则必须从某个地方获取光栅字体。
如果您正在引导程序级别的汇编中编写代码,则可用性非常有限。绝对不能使用int 0x21
。
你基本上在做两件不同的事情:
涉及两个不同的BIOS中断,但幸运的是,两者都使用相同的AL值。
mov ah,0h ;get character from keyboard
int 16h ;and store it in AL
mov ah,0eh ;Display a character in AL
int 10h ;aka, echo it
INT 21h 是MSDOS中的一个功能,如果我们谈论引导程序,这是不允许的。
int 21h
而推断)?答案取决于你编写代码的环境。 - nrz