我试图在WinXP DOS框中运行的16位Turbo Pascal 7程序(请不要...)使用高性能计数器。我可以使用内联$ 0F,$ 31执行RDTSC指令,并将AX和DX的内容设置为合理值,但我如何访问EAX,EDX的上半部分并将结果写入2个长字全局变量?在16位Turbo Pascal中访问高性能计数器
3
A
回答
4
如果我读我的文档正确,那么你可以通过使用0x66前缀码访问从实模式的32位寄存器。因此,内嵌“$ 66 $ 50”应该具有以下效果:它将EAX作为32位值推入堆栈。然后,您只需将两个普通(16位)pop
操作码(您将首先获得较低的一半)弹出上半部分和下半部分。对于EDX,使用“$ 52”而不是“$ 50”。
(我没有尝试这样做。)
0
对于在DOS中使用32位寄存器,您需要DOS扩展器或平面实模式。第一种方法可以为保护模式编写程序(您需要在某处切换代码生成模型),而后者将是一种32位实模式。我怀疑它会在DOS框中工作,也许DOS模拟器可以工作。
AFAIK(15年...)Borland Pascal有一个自己的DOS扩展器,RTM.EXE或其他东西。
相关问题
- 1. 复位性能计数器
- 2. 替换为Turbo Pascal(3.0)
- 3. 如何在代码中访问C#性能计数器?
- 4. 最好在VBScript中访问Windows(XP)性能计数器
- 5. KVM中每位访客的性能计数器
- 6. 高性能jpeglib-turbo implmentation能在<100ms内解压/压缩吗?
- 7. 16位TIFF中的访问像素
- 8. Turbo Pascal的BNF/EBNF(最好5.5或更高,因为OOP)?
- 9. Think Pascal中的位功能
- 10. 如何基于16位FTM计数器实现32位计数器?
- 11. 以Turbo Pascal方式获取PHP变量
- 12. 如何使用Graph单位在Turbo Pascal中创建无闪烁动画?
- 13. 如何在Windows XP Embedded中访问C#中的性能计数器?
- 14. 通过WMI访问定制的应用性能计数器
- 15. 性能计数器
- 16. 最高16位的EAX
- 17. 性能计数器?
- 18. 性能计数器
- 19. Vista上的性能计数器问题
- 20. 数据集设计器性能问题
- 21. Turbo Pascal:在字符串中替换字符与其他字符
- 22. F#高阶属性访问器
- 23. 在Java中创建性能计数器
- 24. 高性能计时器vs秒表
- 25. Windows性能监视器中的性能计数器计时器值不准确
- 26. 高性能属性访问和可能的动态编译
- 27. 我正在寻找CRC-16/ARC德尔福(Pascal)功能
- 28. 什么是查询过程性能计数器的最高性能方法?
- 29. 性能计数器的性能如何?
- 30. drupal访问计数器
其实,IIRC 16/32正交于真正的/保护(286分割,没有16位模式),前缀66H只是选择另一种(16/32)为以下insn。 – ninjalj 2011-04-07 18:59:20
谢谢@Thomas。这样可行。我们还发现,在前面的一个mov [GlobalLongwordVariable]中,一个66美元的斧头也应该可以工作,而且它的确如此。 – rossmcm 2011-04-07 21:42:53
@ninjalj:是的。 0x66前缀允许从16位代码访问32位寄存器。实模式和VM86模式(实模式仿真)都是16位代码(在VM86模式下,WinXP DOS框运行代码)。但是,您也可以拥有受保护的16位模式(Windows 3.0称为“标准模式”)。 – 2011-04-08 12:30:59