Как вы делаете вставку сортировки в сборке? - PullRequest
0 голосов
/ 21 октября 2011

Я работал над программой для сортировки вставок, но я не могу заставить ее работать. Может кто-нибудь сказать мне, что я делаю не так? Просто игнорируйте процедуру 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 Ответ

1 голос
/ 21 октября 2011
mov edx,myArray[ebx]
mov myArray[ebx-4],edx
sub edx,4

Вам следует поменять местами элементы, но вместо этого вы перезаписываете myArray[ebx-4] без создания временной копии для замены myArray[ebx] на.

Также ваша регистровая копия текущего элемента myArray[ebx], edx не должна изменяться в следующей строке.

sub edx,4

Надеюсь, что эти две ошибки позволят вам запустить ваше решение. Я не знаю достаточно, чтобы переписать все это для вас. У меня нет прав переформатировать код вашего сообщения, поэтому, пожалуйста, нажмите на стрелку вверх, если это помогло.

...