【发布时间】:2016-03-13 21:46:18
【问题描述】:
我的应用程序在一台装有 Intel Atom Z520PT 处理器的计算机上在 DOS 下运行,该处理器的运行频率为 1.333GHz,时钟脉冲约为 0.75ns。我在 VisualStudio 2010 中使用 C 编译器。
我使用许多 inp() 和 outp() 命令来访问处理器的 I/O 寄存器。 这些命令中的每一个都需要大约 2.2µs。从 I/O 设备获取特定于应用程序的数据数组需要 40 到 50 次 outp() 和 inp() 调用,因此我每毫秒只能执行 10 次。
有什么方法可以更快地访问 I/O 寄存器吗?为什么这些命令要花这么多时间?我可以通过使用 asm 而不是 C 来加快速度吗?
【问题讨论】:
-
您是在实际运行 DOS(如在实际的实模式 DOS 操作系统中,这在当今非常罕见)还是在 I/O 指令所在的 Windows 控制台窗口中运行 DOS 程序被虚拟化了?或者完全是别的什么?我认为 VS 2010 中的 C 编译器不会生成 DOS 可执行文件。
-
@MichaelBurr 我第二个问题! - MSVC 2010 无法创建 16 位应用程序。我的回答假设 OP 表示真正的 16 位 DOS,例如 PC-104 或类似设备上的嵌入式应用程序。
标签: c io dos intel cpu-registers