bios中断函数21h(ah = 1h)应从标准输入读取一个字符并回显它。
我的阅读功能:
mov ah, 1h
int 21h
所以,如果我按一个键就会意识到这一点,但它不会回显一个角色。由于我使用我的代码从我的软盘和字符echo函数int 10h(啊= 0eh)启动它,我想我必须存储它然后用“视频 - 电传输出”回显它(int 10h(ah = 0eh) ))。
或者我在遗漏代码中遗漏了什么?
答案 0 :(得分:2)
中断0x21是类似MSDOS操作系统功能的“接口”,而不是BIOS。
如果您正在编写实模式引导加载程序或小型OS内核,则必须使用自己的IRQ 1处理程序。
有关捕获自己的内存缓冲区中所有按键的方法,请参阅此答案: How to check keys status in x86 assembly?
然后你必须安排某种循环。您检查按键(通过读取内存缓冲区)。一旦检测到按键,要打印“回显”键,您必须向视频内存写入内容。那是另一个故事。如果您使用的是默认文本模式,只需写入0xB800段即可。如果你正在使用图形模式(VGA或VESA),那么你必须从某个地方获得光栅字体。
如果您在引导加载程序级别的汇编中编写内容,则可用的内容不多。绝对不是int 0x21
。
答案 1 :(得分:0)
你基本上做了两件事:
涉及两个不同的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的东西,如果我们谈论bootloader,这是一个禁忌。