所以我一直負責編寫使用匯編程序的C++代碼,這應該是二進制搜索。彙編代碼運行無限循環
這裏是C++調用的樣子:
index = AsmBinarySearch(value, numbers, SIZE)
下面是彙編代碼的樣子:
TITLE AsmBinarySearch Procedure (AsmBinarySearch.asm)
.586
.model flat,C
AsmBinarySearch PROTO, searchValue:DWORD, arrayPTR:PTR DWORD, count:DWORD
.data
.code
AsmBinarySearch PROC USES edi, searchValue:DWORD, arrayPTR:PTR DWORD, count:DWORD
mov eax,arrayPTR
mov ecx,arrayPTR
add ecx,count
@@:
cmp eax,ecx
jg not_found
mov edx,eax
add edx,ecx
shr edx,1
xchg DWORD PTR [edx],eax
cmp eax,searchValue
xchg DWORD PTR [edx],eax
jg search_right
jl search_left
mov eax,edx
sub eax,arrayPTR
ret
search_right:
mov ecx,edx
jmp @B
search_left:
mov eax,edx
jmp @B
not_found:
mov eax,-1
ret
AsmBinarySearch ENDP
END
問題是本屆大會的代碼運行一個無限循環時從C++程序調用。那麼我該如何解決這個問題?
請幫助我完全修復此代碼,因此它完成了預期的工作,因爲在這一點上,主要是因爲我是初學者,所以找不到任何解決方案來解決此問題。
可憐的@Jester會把他的頭髮拉出 –
@MichaelPetch哈哈,沒錯。我無法完成這項工作,但我不知道問題所在。 –
「我一直負責任」 - 由誰?你能告訴他們去跳嗎? C++標準庫提供了['std :: binary_search'](http://en.cppreference.com/w/cpp/algorithm/binary_search),這比浪費時間更好。 –