BIOS 和 DOS 中断(16H 和 21H)

BIOS and DOS interrupts (16H and 21H)

有些例程可以通过INT 21HINT 16H实现(前者用于DOS,后者用于BIOS)。但是,确切的区别尚不清楚(至少对我而言!)。

例如,下面的例程从键盘读取一个字符

1) INT 21H, 服务 01 用于使用 echo

读取
MOV   AH,01
INT   21H

2) INT 16H,按键服务 01

MOV   AH,01
INT   16H

假设一个程序正在等待一个键。例如,等待 Y/N 的简单的基于文本的向导。为了回显按下的键,首选哪个? 21H 或 16H.

我认为应该在没有操作系统时调用 BIOS 例程(例如 "press F1 to continue" 在 POST 期间)。这就是全部?有没有例子表明一个操作是由其中一个而不是两个单独完成的?

For echoing the pressed key, which one is preferred? 21H or 16H.

当然不是 BIOS 功能,因为它不会回显任何东西!

INT 16H, service 01 for key press

此函数只会检查密钥是否可用。它不会将其从键盘缓冲区中删除。

一般来说,您需要知道 DOS 输入函数可以使用重定向。输入可能根本不是来自键盘。它可能来自文件或其他来源。