Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // YOUR CODE STARTS HERE
- binary_search:
- push ebp
- mov ebp, esp
- sub esp, 4
- push esi
- push edi
- push ebx
- push ecx
- mov ebx, [ebp + 8] // store array
- mov ecx, [ebp + 12] // store toFind
- mov esi, [ebp + 16] // store start
- mov edi, [ebp + 20] // store end
- // mid = eax
- mov eax, edi // eax = end
- sub eax, esi // eax = end - start
- shr eax, 1 // eax = (end - start) / 2 + start
- add eax, esi // eax = (end - start) / 2 + start
- cmp esi, edi // if(start > end) return -1
- jg NEG1
- cmp dword ptr [ebx + eax * 4], ecx // if(data[mid] == toFind) return mid
- je MID
- cmp dword ptr[ebx + eax * 4], ecx // if(data[mid] > toFind)
- jg LOOP1
- cmp dword ptr[ebx + eax * 4], ecx // if(data[mid] < toFind)
- jl LOOP2
- NEG1:
- mov eax, -1
- jmp END
- MID:
- mov eax, eax
- jmp END
- LOOP1:
- sub eax, 1 // mid - 1
- push eax // push mid - 1
- push esi // push start
- push ecx // push toFind
- push ebx // push data
- call binary_search // binarySearch(data, toFind, start, mid - 1)
- jmp END
- LOOP2:
- add eax, 1 // mid + 1
- push eax // push mid + 1
- push edi // push end
- push ecx // push toFind
- push ebx // push data
- call binary_search // binarySearch(data, toFind, mid + 1, end)
- jmp END
- END:
- pop ecx
- pop ebx
- pop edi
- pop esi
- mov esp, ebp
- pop ebp
- ret
- // YOUR CODE ENDS HERE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement