3

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

4

2 回答 2

4

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

(我没有试过这个。)

于 2011-04-07T13:34:26.667 回答
0

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

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

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

于 2011-04-07T07:19:49.300 回答