在汇编器中插入sorting不起作用

我必须在NASM中做插入sorting的数字。 我有一个文件,它会生成随机数字,并以二进制forms生成带有数字的输出文件。 我的程序加载这个作为input文件,应该给输出数字sorting使用插入sorting,也是二进制forms。

我的代码:

; Template assembler source file section .text global _start _start: ; put your code here mov eax, 3 mov ebx, 0 mov ecx, array mov edx, 4*32768 int 80h mov [fileLength], eax shr eax,2 dec eax mov [number], eax mov ebx, 1 outerloop: mov ecx,[array + 4*ebx] mov [item],ecx mov ecx,ebx interloop: mov edx,ecx dec edx mov esi, [array + 4*edx] cmp esi,[array + 4*ecx] jb koniec mov eax,[array + 4*edx] mov [array + 4*ecx],eax loop interloop koniec: mov edx,[item] mov [array + 4*ecx],edx inc ebx cmp ebx,[number] jne outerloop mov eax, 4 mov ebx, 1 mov ecx, array mov edx, [fileLength] int 80h ; exit to linux mov eax,1 mov ebx,0 int 80h ; initialized data section ; use directives DB (byte), DW (word), DD (doubleword), DQ (quadword) section .data ; uninitialized data section ; use directives RESB (byte), RESW (word), RESD (doubleword), RESQ (quadword) section .bss fileLength resd 1 number resd 1 array resd 32768 item resd 1 

我用来写插入sorting的伪代码:

 for i ← 1 to i ← length(A)-1 { // A[ i ] is added in the sorted sequence A[0, .. i-1] // save A[i] to make a hole at index iHole item ← A[i] iHole ← i // keep moving the hole to next smaller index until A[iHole - 1] is <= item while iHole > 0 and A[iHole - 1] > item { // move hole to next smaller index A[iHole] ← A[iHole - 1] iHole ← iHole - 1 } // put item in the hole A[iHole] ← item } 

来源: http : //en.wikipedia.org/wiki/Insertion_sort

我的知识很less,我不知道出了什么问题。 它有时sorting前几个数字,但其余的不正确sorting。

你必须改变线路

 cmp esi, [array + 4*edx] 

 cmp esi, [item] 

并在你的outerloop之前删除dec eax 。 它应该工作。