在汇编中不使用 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 函数号上有所不同。
在开始研究该主题之前,请三思是否需要这种级别的平台依赖性。
我正在使用 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 函数号上有所不同。
在开始研究该主题之前,请三思是否需要这种级别的平台依赖性。