【问题标题】:BIOS and DOS interrupts (16H and 21H)BIOS 和 DOS 中断(16H 和 21H)
【发布时间】:2015-10-29 19:15:43
【问题描述】:

有一些例程可以通过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 例程(例如在 POST 期间“按 F1 继续”)。这就是全部?是否有任何示例表明操作仅由其中一个而不是两者都完成?

【问题讨论】:

    标签: assembly bios keyboardinterrupt


    【解决方案1】:

    要回显按下的键,首选哪一个? 21H 或 16H。

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

    INT 16H,服务 01 按键

    这个函数只会检查一个键是否可用。它不会从键盘缓冲区中删除它。

    通常您需要注意 DOS 输入函数可以使用重定向。输入可能根本不是来自键盘。它可能来自文件或其他来源。

    【讨论】:

    • 如您所说,INT 16H 仅检查是否按下了键。正如我所说,INT 21H 也可以做到这一点。你不同意吗?
    • 从您的回答中,我了解到 INT 21H 将从缓冲区中删除密钥。那是对的吗?关于 INT 16H,为什么在检查其可用性后,密钥应该存在于缓冲区中?
    • BIOS 功能 01h 允许您预览键盘缓冲区的内容。 BIOS 函数 00h 将有效地从同一缓冲区中删除密钥。
    • 谢谢。我可以再问一个问题。当一个例程可以同时使用 DOS 和 BIOS 功能时,首选哪一个?
    • 这个问题没有明确的答案。您必须仔细查看肯定存在的微小差异!我自己更喜欢使用 BIOS 而不是 DOS。不依赖 DOS 的例程更容易移植到无操作系统环境。
    猜你喜欢
    • 2021-04-01
    • 2015-07-23
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2015-04-07
    • 2023-03-27
    相关资源
    最近更新 更多