assembly - 在 16 位 Turbo Pascal 中访问高性能计数器

标签 assembly windows-xp inline-assembly rdtsc turbo-pascal

我正在尝试在 16 位 Turbo Pascal 7 程序(不要问...)中使用高性能计数器,该程序在 WinXP DOS 框中运行。我可以使用内联 $0F、$31 执行 RDTSC 指令,并将 AX 和 DX 的内容设置为看起来合理的值,但我如何访问 EAX、EDX 的上半部分并将结果写入 2 个长字全局变量?

最佳答案

如果我正确阅读了我的文档,那么您可以通过使用操作码的 0x66 前缀从实模式访问 32 位寄存器。因此,内联“$66 $50”应该具有以下效果:它将 EAX 作为 32 位值压入堆栈。然后你只需弹出下半部分和上半部分作为两个正常的(16 位)pop 操作码(你会先得到下半部分)。对于 EDX,请使用“$52”而不是“$50”。

(我没试过这个。)

关于assembly - 在 16 位 Turbo Pascal 中访问高性能计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5576070/

相关文章:

java - 哪个Jdk版本支持windows xp

java - 从 java 应用程序中获取用户名 (windows)

c++ - 使用内联 x86 C++ 程序集将寄存器内容移动到变量时出现错误 C2403

c - 在 GCC 下使用 RDRAND 时如何设置 REX 前缀?

windows - 如何安排任务在关闭窗口时运行

c - GCC 汇编内联 : Function Body with Only Inlined Assembly Code

c - 将地址作为符号加载到通用寄存器中

assembly - 没有函数包含所选帧的程序计数器

visual-c++ - VC++ SSE 代码生成 - 这是编译器错误吗?

调用 C 函数而不用 NM 命令显示它们