在汇编中不使用 io.h 读取输入

Read Input without using io.h in assembly

我正在使用 masm32 学习编写 32 位汇编程序。我想知道如何在不使用 io.h 预定义的宏和过程的情况下直接从输入(如 16 位汇编、调用中断或类似的东西)中读取?可能吗?

谢谢

使用较旧的 OSes,如 DOS,您可以调用例如INT 16h 要求 BIOS 按键。不幸的是,这在 NT-like Windows 下是不可能的。出于多种原因(安全性和稳定性是最重要的),对 BIOS 中断的访问由 Windows 内核控制,因此对常规应用程序有限制。

换句话说,您必须直接或间接地通过 Windows 内核调用获取所有击键。没有别的办法。你调用OS,OS调用内核,内核调用BIOS.

但无论如何,如果您仍想使用中断,则有可能 — 代价是变得比选择 MASM32 作为目标语言后更加依赖于平台。

在 32 位 Windows 下,可以通过 INT 2Eh 访问来自 NTDLL 的许多 Windows API。问题是 Windows 的不同版本(有时甚至是同一版本的不同 builds)在 INT 2Eh 函数号上有所不同。

在开始研究该主题之前,请三思是否需要这种级别的平台依赖性。