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

希望这两个错误可以让您的解决方案正常工作。我知道的不够多,无法为你重写整件事。我没有重新格式化您帖子代码的权限,所以如果这有帮助,请点击我的向上箭头。

于 2011-10-20T21:41:34.217 回答