8086汇编:确定代码的执行时间?

时间:2011-01-15 20:39:02

标签: assembly execution-time

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

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

3 个答案:

答案 0 :(得分:2)

您可以使用oprofile或VTune等分析器,也可以在功能之前和之后调用gettimeofday

我通常使用带有calltree的英特尔VTune性能分析器。它可以显示代码花费的时间和函数的总时间。

答案 1 :(得分:1)

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

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

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

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

您可以调用GetSystemTime API函数,并将其传递给已填充的SYSTEMTIME结构。或者您可以调用timeGetTime,它返回自计算机启动以来的毫秒数。你必须小心这个,因为它将在49天后滚动。

也有其他可行的方法。但最简单的,如果你正在调用INT 21H函数,那就是使用函数2CH。

答案 2 :(得分:0)

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

与VTune不同,还可以查看AMD CodeAnalyst,因为它是免费的。