X86中的RDTSC指令

2022-02-19 11:56:49 字數 837 閱讀 2549

intel

的x86

中的rdtsc

即read time stamp counter

讀取時間計數器的指令。這個指令讀取

cpu時間計數器,返回乙個無符號的

64位整數。它通過

edx eax

暫存器返回

cpu被引導後,時鐘所走的圈數。這意味著,你可以用它來計算時間間隔了多久。但是,由於這個指令還未被

vc++

採用,於是如果想要使用它,則必須用_emit偽指令嵌入它的

opcode0x0f 0x31。

於是可以寫出乙個取得時間計數器的**如下

不難想象,如果我們取兩次,再求得兩次的差值,則可以統計出時間間隔。若要將這個計數器轉換到現實的時間,則只需要除以

cpu的時鐘頻率即可。

上面的內容是《

windows

圖形程式設計》上看到的,由於其歷史久遠,於是我在網上查了一下關於

rdtsc

指令,想看看他的發展前景,不料找到了一篇關於他的不好訊息。

《多核時代不宜再用

x86

的rdtsc

指令測試指令週期和時間》

上面分析了幾點原因,個人認為講得比較好。

不過,出於好奇的心態,你完全可以無視上面的文章,而繼續用上面寫出的函式寫乙個「高精度」的

timer

,的確,它是高精度的。

如果你想看看多核與單核的影響,最好寫乙個多執行緒的測試程式,然後通過控制每個執行緒的

cpu親緣性

------

即讓它們全部在乙個

cpu上執行,或者讓他們分發到不同的

cpu上執行。

X86彙編指令詳解

x86彙編基本分為七大體系 分別是 1 資料傳送指令 2 算術運算指令 3 邏輯運算指令 4 串操作指令 5 控制轉移指令 6 處理器控制指令 7 保護方式指令 先介紹資料傳送指令集 1 資料傳送指令 1.mov 格式 mov destination,source 功能 將s ource中的資料傳送...

x86指令格式

當計算機處理器晶元執行時,它讀取儲存在記憶體中的指令碼。每個指令碼集合可能包含乙個或多個位元組的資訊,這些資訊指示處理器完成特定的任務。每條指令碼都是從記憶體中讀取的,指令碼所需的資料也是儲存在記憶體中並從記憶體中讀取。包含指令碼的記憶體位元組和包含處理器使用的資料的位元組沒有區別。為了區分資料和指...

x86浮點數指令

x86架構下,一般通過專用協處理器計算浮點數。浮點數運算通過fpu float point unit,浮點運算單元計算 計算,提供了浮點棧暫存器st0 st7。fld mem 浮點數入棧 fmul mem st 0 st 0 mem fst mem st 0 轉換為指定精度的浮點數 fstp mem...