我有一些8086汇编代码,它们将调用中断来读写文件。我正在使用TASM来链接和构建我的项目。有哪些选项可供我计算执行所需的时间?如果我等待硬盘读取时间,我不认为计数时钟周期会起作用。
编辑:对于软件推荐,我应该告诉你我正在运行Windows 7。
答案 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,因为它是免费的。