取CPU时间戳

     本来没什么好写的,因为这实在是太简单了。只有一条指令。但即使是一条指令,在易里面也不是容易的。

 

    在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)

你可能感兴趣的:(c,汇编,语言,编译器)