32-битная сборка - сортировка вставками не работает должным образом

Моя задача здесь — добавить код, который сортирует массив с сортировкой вставками. Функция 'printf' печатает строку printArray печатает массив

По какой-то причине массив не сортируется, и я не могу найти причину. Помощь будет оценена.

main:
        push MSG    ; print welcome message
        call printf
        add esp,4   ; clean the stack 

        call printArray ;print the unsorted array

        ;;;;;;;;;;add code here;;;;;;;;;;

        mov eax,1
loop1:
        mov ebx, array
        add ebx, eax

loop2:
        mov esi, ebx
        dec esi
        mov esi, [esi]      ;esi holds the value before what ebx points to
        cmp [ebx], esi
        ja endLoop2

        mov edx, esi
        mov esi, ebx
        dec esi
        mov ecx, [ebx]
        mov [esi], ecx
        mov [ebx], edx
        dec ebx
        cmp ebx, array
        ja loop2

endLoop2:
        inc eax
        cmp eax, 11
        jbe loop1

        ;;;;;;;end of your code;;;;;;;;;;;;;;

        call printArray

        mov eax, 1  ;exit system call
        int 0x80

person user3554255    schedule 06.12.2014    source источник


Ответы (1)


Если ваш массив заполнен однобайтовыми значениями, используйте movb вместо mov при загрузке и сохранении в память.

person JS1    schedule 06.12.2014
comment
Изменил все incs и decs на add/sub 4, и теперь кажется, что массив вообще не печатается после циклов. Может быть, он изменил адрес массива (?!). Для меня это не имеет смысла. Какие-то другие вещи, которые вы здесь находите неправильными? - person user3554255; 06.12.2014
comment
Я сделал это, и это все испортило. Также ваш комментарий неверен, так как массив имеет БД, а не целые числа. - person user3554255; 07.12.2014
comment
Извините, я думаю, что неправильно понял проблему. Я отредактировал свой ответ, учитывая вашу новую информацию. - person JS1; 07.12.2014