填充x86 MASM汇编语言后对数组进行排序



有人能帮我解决这个问题吗?我是汇编语言的新手,有点拘泥于下一步该做什么。这是代码:

.data
evenStart    dword          11h
oddStart     dword          20h
darray       dword          15 dup (?)
.code
main PROC
mov esi, OFFSET darray
xor ecx, ecx

L1: 
mov ebx, OFFSET evenStart
test cl,1
jz iseven
mov ebx, OFFSET oddStart

iseven:
mov eax, [ebx]
inc dword ptr [ebx]
mov dword ptr [esi + 4*ecx],eax
inc ecx
cmp ecx,15
jb L1

exit
main ENDP
END main

因此,该项目要求我填充未初始化的数组,我做到了。但它也要求我按降序对这个数组进行排序,然后将数组的中间元素放入eax寄存器并调用DumpRegs。这是我陷入困境的部分。任何关于如何继续的帮助都将是伟大的。非常感谢。

NextBubble Sort使用嵌套循环。因为数组有15个元素,所以外循环在第一次迭代时可以进行14次比较。对于外循环的每次迭代,它必须少做1次比较,因为最小的元素已经向数组的末尾冒泡。

mov ebx, 15-1      ; Outer loop iteration count
OuterLoop:
mov esi, offset darray
mov ecx, ebx       ; Inner loop iteration count
InnerLoop:
lodsd
mov edx, [esi]
cmp eax, edx
jge Skip
mov [esi-4], edx   ; Swap these 2 elements
mov [esi], eax
Skip:
dec ecx
jnz InnerLoop
dec ebx
jnz OuterLoop

未排序的数组:11小时、20小时、12小时、21小时、13小时、22小时、14小时、23小时、15小时、24小时、16小时、25小时、17小时、26小时、18小时

排序后的数组:26小时、25小时、24小时、23小时、22小时、21小时、20小时、18小时、17小时、16小时、15小时、14小时、13小时、12小时、11小时

在这个具有奇数个元素(15(的数组中,元素索引的范围从0到14。在索引7处有一个真正的中间元素。

最新更新