2014-12-06 97 views
0

我的任務是添加一個代碼,用插入排序對數組排序。 'printf'函數打印一個字符串 printArray打印陣列32位程序集 - 插入排序不能正常工作

由於某種原因數組沒有得到排序,我找不到原因。 幫助將不勝感激。

main: 
     push MSG ; print welcome message 
     call printf 
     add esp,4 ; clean the stack 

     call printArray ;print the unsorted array 

     ;;;;;;;;;;add code here;;;;;;;;;; 

     mov eax,1 
loop1: 
     mov ebx, array 
     add ebx, eax 

loop2: 
     mov esi, ebx 
     dec esi 
     mov esi, [esi]  ;esi holds the value before what ebx points to 
     cmp [ebx], esi 
     ja endLoop2 

     mov edx, esi 
     mov esi, ebx 
     dec esi 
     mov ecx, [ebx] 
     mov [esi], ecx 
     mov [ebx], edx 
     dec ebx 
     cmp ebx, array 
     ja loop2 

endLoop2: 
     inc eax 
     cmp eax, 11 
     jbe loop1 

     ;;;;;;;end of your code;;;;;;;;;;;;;; 

     call printArray 

     mov eax, 1 ;exit system call 
     int 0x80 

回答

0

如果你的陣列是滿1個字節的值,用movb代替mov當加載和存儲內存。

+0

改變了所有的公式和decs添加/子4,現在它似乎不打印陣列後的所有循環。也許它改變了數組的地址(?!) 對我來說沒有意義。其他任何你覺得不對的地方? – user3554255 2014-12-06 18:10:30

+0

我做到了,它把整個事情搞砸了。 此外,您的評論是錯誤的,因爲該數組是DB,而不是整數。 – user3554255 2014-12-06 21:46:51

+0

對不起,我猜我誤解了這個問題。我根據你的新信息編輯了我的答案。 – JS1 2014-12-06 22:06:15