如何在NASM中对数组进行排序?

时间:2014-11-06 04:12:51

标签: arrays sorting assembly nasm bubble-sort

我发布这个因为发现这个任务相当困难,StackOverflow帮助了我无数次。希望这会帮助其他人。

问题描述:

读入N个整数,以零值终止(不使用零)。将这些数字按升序排序并打印出来。如果在零值之前没有输入数据,或者输入了太多数据并且数据溢出,则必须生成错误消息。该程序应该能够处理多达100个整数值。

方法:

我决定使用冒泡排序,它对数组N的数组迭代遍历数组中的每个值N次。它查看每个值并将其与下一个值进行比较;如果第一个值高于下一个值,则会切换它们。这可以很容易地修改为按降序列出它们。无论如何,这里最困难的是在nasm中处理嵌套循环,并正确循环所有ecx值和诸如此类的东西。我发布的代码评论很好。此外,任何建设性的批评都是受欢迎的,问题也是如此。

对这个项目的反思:

我认为可能有更好的方法来浏览数组中的元素,而不是使用ebx。 Masm有一个指针可以用来迭代值。此代码可以满足要求,但可能更好。此外,冒泡排序可能不是最好的方法。我知道还有其他排序算法,但泡沫似乎是最容易在nasm中实现的。

1 个答案:

答案 0 :(得分:1)

最好在问题中包含您的解决方案。现在似乎问题已经得到解答,不需要再注意了。幸运的是,这是我对它的看法:

您必须使用101个双字初始化数组,因为在跳转到标签之前,您将存储许多输入。 在递减ECX时,您评论它是因为基于0的索引。这不是真的。这是因为一系列N元素需要进行N-1比较 我发现很难跟踪堆栈中的内容。我建议你有点像这样评论

push ecx    ;(1)
dec ecx
push ecx    ;(2)
...
loop L3
pop ecx     ;(2)
SetWrite:
xor ebx,ebx
pop ecx     ;(1)