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