本来没什么好写的,因为这实在是太简单了。只有一条指令。但即使是一条指令,在易里面也不是容易的。
在C里面 可以用
__asm {
RDTSC
};
它的内容全部保存在 EAX,EDX中(EDX)是高位。 也就是说是一个长整数了。
在易里面 可以用置入代码。先写了一个易语言的返回值为长整数的函数,然后编译。看看它的机器码。
00403232 mov edx,0
00403237 mov eax,64h
00403242 mov esp,ebp
00403244 pop ebp
很好,它也是通过 EDX:EAX 返回的。这下不用我返回值了。不要奇怪。易语言生成的机器码效率就是这么的不行,我没有定义局部变量 但 "mov esp,ebp"这条指令还是出现了。
剩下的好办,写个汇编,编译好。取机器码。然后填进去就是。代码如下:
00401357 0F31 rdtsc
00401359 89EC mov esp,ebp
0040135B 5D pop ebp
0040135C C3 ret
因为 易的返回长整数和 rdstc都是用 EDX:EAX的。所以无须操心了。ret返回就可以了。
生成的机器码是 15, 49, 137, 236, 93, 195 。置入代码写进去,
会编译不过。不过不用担心。在后面加入一个 返回(0) 这里是执行不到的。欺骗一下易编译器而已。这样一个取CPU时间戳的函数就写出来了。
.子程序 取CPU时间戳, 长整数型, 公开, 取得CPU经过的时钟周期数
置入代码 ({ 15, 49, 137, 236, 93, 195 })
返回 (0)