Sorting x86汇编:初学者编程插入排序

Sorting x86汇编:初学者编程插入排序,sorting,assembly,x86,Sorting,Assembly,X86,完成这个.asm代码让我非常恼火。 必须使用插入排序按顺序打印此结果 实际上,我尝试了Bubble_排序,以防算法的逻辑可能出错。我想请你通读一下这段代码。欢迎您提供任何建议。我真的想知道我错过了什么 以下是迄今为止我得到的结果:(冒泡排序的rlt也很奇怪。因为我不知道如何在asm中调试,我忍不住一次又一次地阅读代码。急需帮助。) 1 3 5 2 7 4 6 8 9 10 错误包括: 您使用mov eax、[array+4*ECX]中的ECX寄存器,但未能事先设置它 使用mov[next],e

完成这个.asm代码让我非常恼火。 必须使用插入排序按顺序打印此结果

实际上,我尝试了Bubble_排序,以防算法的逻辑可能出错。我想请你通读一下这段代码。欢迎您提供任何建议。我真的想知道我错过了什么

以下是迄今为止我得到的结果:(冒泡排序的rlt也很奇怪。因为我不知道如何在asm中调试,我忍不住一次又一次地阅读代码。急需帮助。)

1 3 5 2 7 4 6 8 9 10

错误包括:

  • 您使用
    mov eax、[array+4*ECX]
    中的
    ECX
    寄存器,但未能事先设置它

  • 使用
    mov[next],eax
    可以在定义为单词的变量中写入dword

  • 这个
    jmp while1
    去哪里了?没有这样的标签

  • 不确定汇编程序是否能理解此寻址:
    mov[array+4*(ebx+1)],eax
    。可能将其更改为:
    mov[array+4*ebx+4],eax

  • jp while2
    这不应该仅仅是一个
    jmp
    ?这里没有要检查的平价


首先解决所有这些…

我不知道,为什么我登录了另一个帐户并询问,上面的一个(用户3787105)就是我,我只想说我解决了这个问题。让我发疯的错误是由于不必要地使用了“DEC”和“INC”。
谢谢,伙计们。很抱歉没有给你任何好处,因为我忘记了用户3787105的密码

您应该学习如何在asm中调试。这应该比调试高级语言更容易,因为每个asm指令只做一件事。(当你这样做时,你可能会在
jp
上注意到一些有趣的事情)给自己找一个调试器!有很多可用的。当你可以看到程序一步一步地执行时,你就更容易理解它在做什么。我注意到你忘了问一个问题。你的问题是什么?
 %include "asm_io.inc"
 section .data
   array dd 3,1,5,7,2,8,4,9,6,10
   size dd 10
   segment .bss
   next resw 1
 segment .text
 global main
 main:
   enter 0,0
   pusha
   ; Insertion Sort Start from here 
   mov eax,[array+4*ecx]
   mov [next], eax
   ; j = i-1
   mov ebx, ecx
   dec ebx
 while2:
   cmp ebx,0
   jl EndLoop2
   mov eax, [next]
   cmp [array+4*ebx],eax
   jle EndLoop2
   ;array[j+1] = array[j]
   mov eax, [array+4*ebx]
   mov [array+4*(ebx+1)], eax
   ; j--
   dec ebx
   ; Go back to the top of this loop
   jp while2
 EndLoop2:
   mov eax, [next]
   mov [array+4*(ebx+1)],eax
   inc ecx
   jmp while1
 EndLoop1:
   mov ecx,0
 nextInt:
   mov eax, [array+4*ecx]
   call print_int
   call print_nl
   inc ecx
   cmp [size], ecx
   jne nextInt
   popa
   mov eax, 0
   leave
   ret