2011-10-20 12 views
0

私は挿入ソート用のプログラムで作業していましたが、動作させることができません。誰かが私が間違っていることを教えてもらえますか?ちょうどenterArrayの手順を無視して、私は今アルゴリズムを理解しようとしています。アセンブリで挿入ソートをどのようにしますか?

TITLE Insertion Sort (main.asm) 
INCLUDE Irvine32.inc 

.data 
myArray SDWORD 12, 9, 15, 5 
str1 byte "Enter the array: " ,0 
str2 byte "The sorted array is: ",0 

.code 
main PROC 
    call Clrscr 
    ;call enterArray 
    call InsertionSort 
    exit 
main ENDP 


enterArray PROC 
;reads the array from the console 
    pushad 
    mov edi, OFFSET myArray 
    mov edx, OFFSET str1 
    call WriteString 
    call ReadInt 
    mov [edi], eax 
    add edi, 4 
    popad 
    ret 
enterArray ENDP 

InsertionSort PROC 
    pushad 

    mov ecx, SIZEOF myArray -1 
    mov eax, OFFSET myArray 

    outterloop: 
    mov edx,myArray[eax] 
    mov ebx,eax 

    beginwhile: 
     cmp ebx,0 
     JE endwhile 
     cmp myArray[ebx-4],edx 
     JNG endwhile 
     mov edx,myArray[ebx] 
     mov myArray[ebx-4],edx 
     sub edx,4 
     JMP beginwhile 
    endwhile: 
    add eax,4 
    LOOP outterloop 

    popad 
    ret 
InsertionSort ENDP 

END main 
+0

mov ebx、eax begin: cmp ebx、0'なぜ 'eax'を' ebx'に移動していますか?なぜただ一つの 'eax'に固執しないのですか? – John

答えて

1
mov edx,myArray[ebx] 
mov myArray[ebx-4],edx 
sub edx,4 

あなたは要素を交換しなければならないが、代わりにあなたがmyArray[ebx]を置き換えるために、一時的なコピーを作成せずmyArray[ebx-4]を上書きしています。

また、現在の要素myArray[ebx],edxの登録コピーは、次の行で変更しないでください。

sub edx,4 

これらの2つのバグを使用すると、ソリューションが機能するようになります。私はあなたのために全部を書き直すのに十分なものではありません。私はあなたの郵便のコードを再フォーマットする特権を持っていないので、これが助けになったら私の上矢印を押してください。

関連する問題