多くの配列アクセス (静的配列、実行時に変更なし) を使用してワード プロセッシング コードをコーディングしています。文字列をハッシュしてから、配列にあるかどうかを確認します(ルックアップ)。しかし、それの良い実装は何ですか? 私は簡単な方法でやっています。ハッシュ入力と一致するかどうか、値ごとに値をチェックしています。それを最速にするためのアイデア?
私は現在チェックしています:
ループのアンローリングを使用すると、これは非常に異なったものになります。順序付けられていない配列を使用すると、並べ替えられた配列よりもはるかに遅くなります。この場合、ベクトル化がうまくいくかどうかを確認します。
おすすめは何ですか?または、このアルゴリズムをどのように実装しますか?
現在のルーチンはEAX
次のとおりです (一致しない場合は、配列内のハッシュのインデックスまたは負の値に戻ります)。
Index_of:
push edx
push ecx
push ebx
mov ecx,123456 ;hash example. in the real code,it's set by a routine.
xor ebx,ebx
mov eax,array
.LOOP1:
cmp [eax],ecx ;match hash?
je .FOUND
cmp byte [eax],0
je .NOTFOUND
add ebx,1
add eax,4
jmp .LOOP1
.NOTFOUND:
neg eax
jmp .DONE
.FOUND:
mov eax,ebx
.DONE:
pop ebx
pop ecx
pop edx
ret
配列は次のとおりです。
; hashs for examples
array:
dd 33389990
dd 1234567
dd 81919191
dd 938383737
0