你如何在汇编中进行插入排序?

时间:2011-10-20 21:19:16

标签: assembly masm irvine32

我一直在研究插入排序的程序,但我似乎无法让它工作。谁能告诉我我做错了什么?只需忽略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

1 个答案:

答案 0 :(得分:1)

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

您应该交换元素,而是覆盖myArray[ebx-4],而不是使用临时副本替换myArray[ebx]

此外,您的当前元素myArray[ebx]edx的注册副本不应在以下行中更改。

sub edx,4

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