【发布时间】:2021-01-13 13:19:41
【问题描述】:
谁能帮我解决这个问题,我是汇编语言的新手,有点坚持下一步该做什么。代码如下:
.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。这是我陷入困境的部分。有关如何进行的任何帮助都会很棒。谢谢!
【问题讨论】:
-
你的意思是向后循环,因为你知道它从填充它有这个交替的升序,所以向后倒是降序?或者您是否应该通过对数组进行排序来实际修改数组,就像使用 InsertionSort 一样? (而不是“排序”;英文措辞可能意味着搜索它)。
-
@PeterCordes 我的意思是实际上对数组进行排序,例如,如果数组由 15 20 11 14 组成,排序后将是 20 15 14 11。类似的东西。
-
好的,这是一个常见问题,已经解决了很多次。如果您想了解其他人如何实现双字数组的排序,请在 Google 上找到答案。除非您应该利用基于奇数/偶数初始化程序的已知内容,并通过单个循环将数组重写为排序顺序?
-
@PeterCordes 是的,这正是我在这里想要实现的,因为大多数数组排序都已经初始化了整个数组。在这种情况下,我必须用基于奇数/偶数初始化器的值填充数组,所以我不知道如何处理它。我认为我的代码中还会有另一个循环,但我不确定。
-
嗯,简单的事情就是填充数组然后对其进行排序。是的,在第一个循环结束后,只需编写第二个循环(这将是一个嵌套循环;简单的排序算法是 O(n^2))。与其他编程语言一样,您可以将 2 个独立的东西一个接一个地放置。
标签: arrays sorting assembly x86