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
4

1 に答える 1

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

要素を交換する必要がありますが、代わりにmyArray[ebx-4]一時的なコピーを作成せずに上書きしてmyArray[ebx]います。

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

sub edx,4

これら 2 つのバグにより、ソリューションが機能することを願っています。私はあなたのためにすべてを書き直すのに十分な知識がありません。私はあなたの投稿のコードを再フォーマットする権限を持っていません。

于 2011-10-20T21:41:34.217 に答える