Advertisement
Guest User

Untitled

a guest
Mar 17th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. // YOUR CODE STARTS HERE
  2. binary_search:
  3. push ebp
  4. mov ebp, esp
  5. sub esp, 4
  6.  
  7. push esi
  8. push edi
  9. push ebx
  10. push ecx
  11.  
  12. mov ebx, [ebp + 8] // store array
  13. mov ecx, [ebp + 12] // store toFind
  14. mov esi, [ebp + 16] // store start
  15. mov edi, [ebp + 20] // store end
  16.  
  17. // mid = eax
  18. mov eax, edi // eax = end
  19. sub eax, esi // eax = end - start
  20. shr eax, 1 // eax = (end - start) / 2 + start
  21. add eax, esi // eax = (end - start) / 2 + start
  22.  
  23. cmp esi, edi // if(start > end) return -1
  24. jg NEG1
  25.  
  26. cmp dword ptr [ebx + eax * 4], ecx // if(data[mid] == toFind) return mid
  27. je MID
  28.  
  29. cmp dword ptr[ebx + eax * 4], ecx // if(data[mid] > toFind)
  30. jg LOOP1
  31.  
  32. cmp dword ptr[ebx + eax * 4], ecx // if(data[mid] < toFind)
  33. jl LOOP2
  34.  
  35. NEG1:
  36. mov eax, -1
  37. jmp END
  38.  
  39. MID:
  40. mov eax, eax
  41. jmp END
  42.  
  43. LOOP1:
  44. sub eax, 1 // mid - 1
  45. push eax // push mid - 1
  46. push esi // push start
  47. push ecx // push toFind
  48. push ebx // push data
  49. call binary_search // binarySearch(data, toFind, start, mid - 1)
  50. jmp END
  51.  
  52. LOOP2:
  53. add eax, 1 // mid + 1
  54. push eax // push mid + 1
  55. push edi // push end
  56. push ecx // push toFind
  57. push ebx // push data
  58. call binary_search // binarySearch(data, toFind, mid + 1, end)
  59. jmp END
  60.  
  61. END:
  62.  
  63. pop ecx
  64. pop ebx
  65. pop edi
  66. pop esi
  67.  
  68. mov esp, ebp
  69. pop ebp
  70.  
  71. ret
  72. // YOUR CODE ENDS HERE
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement