bios 中断函数 21h (ah = 1h) 应该从标准输入中读取一个字符并回显它。
我的阅读功能:
mov ah, 1h
int 21h
所以,如果我按下一个键,它会意识到这一点,但它不会回显一个字符。由于我使用我的代码从我的软盘和字符回显功能 int 10h (ah = 0eh) 启动它,我想我必须存储它然后用“视频 - 电传输出” (int 10h (ah = 0eh) 回显它))。
还是我错过了 aboce 代码中的某些内容?
中断 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 的东西,如果我们谈论的是引导加载程序,这是一个禁忌。