???? 本來沒什么好寫的,因為這實在是太簡單了。只有一條指令。但即使是一條指令,在易里面也不是容易的。
?
??? 在C里面 可以用
????__asm?{
????????RDTSC
????};
????它的內(nèi)容全部保存在 EAX,EDX中(EDX)是高位。 也就是說是一個長整數(shù)了。
?
?? 在易里面 可以用置入代碼。先寫了一個易語言的返回值為長整數(shù)的函數(shù),然后編譯??纯此臋C器碼。
????????????00403232?? mov???????? edx,0
????????????00403237?? mov???????? eax,64h
????????????00403242?? mov???????? esp,ebp
????????????00403244?? pop???????? ebp
????很好,它也是通過 EDX:EAX 返回的。這下不用我返回值了。不要奇怪。易語言生成的機器碼效率就是這么的不行,我沒有定義局部變量 但 "mov???????? esp,ebp"這條指令還是出現(xiàn)了。
剩下的好辦,寫個匯編,編譯好。取機器碼。然后填進去就是。代碼如下:
????????????00401357 0F31???????????????????? rdtsc
????????????00401359 89EC???????????????????? mov???? esp,ebp
????????????0040135B 5D?????????????????????? pop???? ebp
????????????0040135C C3?????????????????????? ret
因為 易的返回長整數(shù)和 rdstc都是用 EDX:EAX的。所以無須操心了。ret返回就可以了。
生成的機器碼是 15, 49, 137, 236, 93, 195 。置入代碼寫進去,
?
????會編譯不過。不過不用擔(dān)心。在后面加入一個 返回(0) 這里是執(zhí)行不到的。欺騙一下易編譯器而已。這樣一個取CPU時間戳的函數(shù)就寫出來了。
?
.子程序 取CPU時間戳, 長整數(shù)型, 公開, 取得CPU經(jīng)過的時鐘周期數(shù)
????置入代碼 ({ 15, 49, 137, 236, 93, 195 })
????返回 (0)