【问题标题】:32bit assembly - insertion sort doesn't work properly32 位汇编 - 插入排序无法正常工作
【发布时间】:2014-12-06 16:52:48
【问题描述】:

我在这里的任务是添加一个使用插入排序对数组进行排序的代码。 '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

【问题讨论】:

    标签: arrays sorting assembly insertion-sort


    【解决方案1】:

    如果您的数组包含 1 个字节的值,则在加载和存储到内存时使用 movb 而不是 mov

    【讨论】:

    • 将所有 incs 和 decs 更改为 add/sub 4,现在它似乎根本不打印循环后的数组。也许它改变了数组的地址(?!)对我来说没有意义。您还发现这里有什么其他错误吗?
    • 我这样做了,结果把整个事情搞砸了。您的评论也是错误的,因为数组是 DB,而不是 ints。
    • 对不起,我想我误解了这个问题。根据您的新信息,我编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 2020-12-14
    • 2011-06-03
    • 2012-03-29
    • 2018-07-18
    相关资源
    最近更新 更多