我想這樣搜索兩個給定值之一的彙編緩衝區,,它僅相差。假設0xfefefeff
和0xfefefefe
(換句話說 - lsb對於搜索無關緊要)在彙編中搜索2個不同值的最快方法
緩衝區的長度會有所不同。
我以爲那個任務大約兩種可能的方式:
方式#1:
mov eax, 0xfefefeff
test eax, eax
repne scasd
...
mov eax, 0xfefefefe
test eax, eax
repne scasd
方式#2:
mov eax, 0xfefefefe
lblSearch:
mov esi, [edi] ; edi - the buffer
and si, 0fffeh
cmp eax, esi
...
add edi, 4
loop lblSearch
我試圖來衡量的執行時間使用QueryPerformanceCounter
和visual studio diagnostic tools
在那__asm
片段C
,但找不到一致的結果。這個問題的表現非常重要。
任何想法是什麼將是一個更好的方式來實現呢?
謝謝。
這是每個數據樣本兩次比較的最壞情況,這很可能是記憶債券的表現。 – user3528438
你的緩衝區有多大? – Jester
so x86上的操作系統?測量性能將是困難的。你必須和明確地進行比較,所以要麼嘗試在一個事務中執行更大的讀取操作,並且可能會燒錄更多指令或燒錄更少的指令並執行更多的數據訪問。不認爲有一個真正的捷徑。 –