我正在尝试在WinXP DOS框中运行的16位Turbo Pascal 7程序(不要问...)中使用高性能计数器。我可以使用内联$ 0F,$ 31执行RDTSC指令,并将AX和DX的内容设置为看似合理的值,但是如何访问EAX,EDX的上半部分并将结果写入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或其他东西。