0

我有一些 8086 汇编代码将调用中断以读取和写入文件。我正在使用 TASM 链接和构建我的项目。我可以使用哪些选项来计算执行需要多长时间?如果我在等待硬盘读取时间,我认为计算时钟周期不会起作用。

编辑:对于软件推荐,我应该告诉你我正在运行 Windows 7。

4

3 回答 3

2

您可以使用像 oprofile 或 VTune 这样的分析器,或者只是gettimeofday在函数之前和之后调用。

我通常使用带有 calltree 的 Intel VTune 性能分析器。它可以显示在您的代码上花费了多少时间以及函数的总时间。

于 2011-01-15T20:45:51.543 回答
1

这取决于您想要获得的准确程度,以及您想要解决多少麻烦。

你说你正在调用中断来读取和写入文件。我假设您正在执行旧的 INT 21H 中断功能。INT 21H 功能 2Ch 返回时间,精确到大约 5/100 秒。有关更多信息,请参见http://spike.scu.edu.au/~barry/interrupts.html#ah2c

如果你可以调用 Windows API 函数,那么你可以调用QueryPerformanceCounter以获取你想要计时的代码开头的滴答计数。之后再次调用该函数,从结尾减去开头,然后将结果除以 from 的返回值QueryPerformanceFrequency,就可以了。

当然,这需要进行 64 位运算。

You can call the GetSystemTime API function, passing it a SYSTEMTIME structure that gets populated. Or you can call timeGetTime, which returns the number of milliseconds since the computer was started. You have to be careful with this one, because it will roll over after 49 days.

There are probably other ways to go, too. But the simplest, if you're calling INT 21H functions, is to just use function 2CH.

于 2011-01-15T21:11:10.287 回答
0

RDTSC 指令将为您提供高度准确的时序信息,但在现代操作系统和 CPU 上确实有点下降。查看 Wikipedia 页面以获取更多信息(或 Google 获取 RDTSC):http ://en.wikipedia.org/wiki/Time_Stamp_Counter 如果可以,使用 Win API 获取 QueryPerformanceCounter/QueryPerformanceFrequency 将是更安全的选择(但也更多的开销 - 对你的情况来说可能太多了,因为听起来你可能需要非常细粒度的时间?)。

另请查看 AMD CodeAnalyst,因为它是免费的,与 VTune 不同。

于 2011-01-15T21:10:10.173 回答