32位汇编​​ - 插入排序不能正常工作 [英] 32bit assembly - insertion sort doesn't work properly

查看:140
本文介绍了32位汇编​​ - 插入排序不能正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这里,我的任务是增加一个code,它与排序插入排序的数组。
printf的函数打印字符串
printArray打印阵列

由于某种原因,数组没有得到排序,我不能找到的原因所在。
帮助将AP preciated。

 主:
        推味精;打印欢迎信息
        调用printf
        ADD ESP,4;清洁栈        调用printArray;打印排序的数组        ;;;;;;;;;;在此处添加code ;;;;;;;;;;        MOV EAX,1
循环1:
        MOV EBX,阵列
        添加EBX,EAX循环2:
        MOV ESI,EBX
        十二月ESI
        MOV ESI,[ESI]; ESI之前持有什么EBX指向值
        CMP [EBX],ESI
        JA endLoop2        MOV EDX,ESI
        MOV ESI,EBX
        十二月ESI
        MOV ECX,[EBX]
        MOV [ESI],ECX
        MOV [EBX],EDX
        十二月EBX
        CMP EBX,阵列
        JA循环2endLoop2:
        INC EAX
        CMP EAX,11
        JBE循环1        您code的;;;;;;;结束;;;;;;;;;;;;;;        调用printArray        MOV EAX,1;退出系统调用
        INT 0x80的


解决方案

如果您的数组已满1个字节的值,可以使用 MOVB 而不是 MOV 时加载和存储到内存中。

My task here is to add a code that sorts the array with insertion sort. 'printf' function prints a string printArray prints the array

For some reason the array doesn't get sorted, and i cant find the reason why. Help will be appreciated.

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

解决方案

If your array is full of 1 byte values, use movb instead of mov when loading and storing to memory.

这篇关于32位汇编​​ - 插入排序不能正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆