2
我在32位彙編中遇到了一個問題,它在Linux上與NASM進行彙編。 這是我實現插入排序未指定操作大小
myInsertionSort:
push ebp
mov ebp, esp
push ebx
push esi
push edi
mov ecx, [ebp+12] ;put len in ecx, our loop variable
mov eax, 1 ; size of one spot in array, one byte
mov ebx, 0
mov esi, [ebp+8] ; the array
loop loop_1
loop_1:
cmp eax, ecx ; if we're done
jge done_1 ; then done with loop
push ecx ; we save len, because loop command decrements ecx
mov ecx, [esi+eax] ; ecx now array[i]
mov ebx, eax
dec ebx ; ebx is now eax-1, number of times we should go through inner loop
loop_2:
cmp ebx, 0 ; we don't use loop to not affect ecx so we use ebx and compare it manually with 0
jl done_2
cmp [esi+ebx], ecx ;we see if array[ebx] os ecx so we can exit the loop
jle done_2
mov edx, esi
add edx, ebx
push [edx] ; pushing our array[ebx] *****************************
add edx, eax
pop [edx] ; poping the last one *********************************
dec ebx ; decrementing the loop iterator
jmp loop_2 ; looping again
done_2:
mov [esi+ebx+1], ecx
inc eax ; incrementing iterator
pop ecx ; len of array to compare now to eax and see if we're done
jmp loop_1
done_1:
pop edi
pop esi
pop ebx
pop ebp ; we pop them in opposite to how we pushed (opposite order, it's the stack, LIFO)
ret
的現在...當我嘗試編譯我的代碼以NASM,我得到的錯誤,在包含在評論中星號線「的操作規模沒有指定」:P 這是基本的插入排序,我不確定會出現什麼問題。 請賜教。
確實,謝謝。另一件事,如果我可以:http://pastebin.com/dz4UmJ0Q 你可以在這裏看到一個問題?它打印垃圾值和隨機數的TONS並在printArray中發佈分段錯誤 – Jack
在調用'printf'之前,您只需要按下一個項目! –
@FRankKotler是的。現在我已經解決了這個問題,但是在插入排序的loop_2中會彈出一個分段錯誤,請問能否幫我找到問題? http://pastebin.com/dbRh58f2 – Jack