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

时间:2011-04-07 04:41:18

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

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

2 个答案:

答案 0 :(得分:4)

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

(我没试过。)

答案 1 :(得分:0)

要在DOS中使用32位寄存器,您需要DOS扩展器或平面实模式。第一个可以编写用于保护模式的程序(您需要在某处切换代码生成模型),后者将是一种32位实模式。我怀疑它可以在DOS框中工作,也许DOS模拟器可以工作。

AFAIK(15年......)Borland Pascal拥有自己的DOS扩展程序,RTM.EXE或其他东西。

切换到平面实模式: http://www.assembly.happycodings.com/code54.html