bsearch.asm
来自「工欲善其事」· 汇编 代码 · 共 87 行
ASM
87 行
; #########################################################################
.486 ; create 32 bit code
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
.code
;##########################################################################
BinSearch proc startpos:DWORD,source:DWORD,lnsrc:DWORD,
pattern :DWORD,lnpatn:DWORD
push ebx
push esi
push edi
mov edi, pattern
mov al, [edi] ; get 1st byte
mov esi, source
mov ecx, lnsrc
add esi, ecx
neg ecx
add ecx, startpos
dec lnpatn
jmp main_loop
; %%%%%%%%%%%%%%%%%%%%%%%%%%%%
pre_loop:
pop ecx
inc ecx
main_loop:
; ------------
; unroll by 2
; ------------
cmp al, [esi+ecx]
je pre_sub
inc ecx
jz nMatch
cmp al, [esi+ecx]
je pre_sub
inc ecx
jnz main_loop
; ------------
jmp nMatch
pre_sub:
push ecx
mov edi, pattern
sub edi, ecx
mov ebx, lnpatn
sub_loop:
mov ah, [esi+ecx+1]
cmp ah, [edi+ecx+1]
jne pre_loop
inc ecx
dec ebx
jnz sub_loop
; %%%%%%%%%%%%%%%%%%%%%%%%%%%%
pop eax
add eax, lnsrc
jmp Outa_Here
nMatch:
mov eax, -1
Outa_Here:
pop edi
pop esi
pop ebx
ret
BinSearch endp
; #########################################################################
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?