我发布这个,因为发现这个任务相当困难,并且StackOverflow帮了我无数次。希望这会帮助别人。如何在NASM中对数组进行排序?
问题描述:
在读取N个整数,通过零值终止(不使用零)。将这些数字按升序排序并打印出来。如果在值为零之前没有输入数据,或者输入了太多数据并且会使数组溢出,则必须产生错误消息。该程序应该能够处理多达100个整数值。
方法:
我决定用冒泡排序,其遍历在阵列N次大小N.它着眼于每个值,并将其与下一个值的数组的每个值;如果第一个值高于下一个值,则切换它们。这可以很容易地修改,以降序列出它们。无论如何,这里最困难的是在nasm中处理一个嵌套循环,并正确地循环所有的ecx值和内容。我发布的代码很好评论。此外,任何建设性的批评都是值得欢迎的,正如问题一样。在这个项目上
思考:
我认为有可能是一个更好的方式去通过元素数组中,而不是使用EBX。 Masm有一个指针可以用来迭代值。此代码正常工作并符合要求,但它可能会更好。另外,冒泡排序可能不是最好的方式。我知道还有其他的排序算法,但泡泡似乎是在nasm中最容易实现的。
它不存储第101个值;在阅读101st int后,它跳转到toomanyints。它在将值写入数组之前将ex与100进行比较。此外,关于基于0的索引,我想我的意思是[intArray]指向第一个值,[intArray + ecx * 4]将在ex为数组长度的情况下抛出一些等价的空指针异常,因为如果数组有100个值,则第一个值是[intArray],而最后一个值是[intArray + 4 * 99]。但对于泡沫排序,我相信你对n-1比较是正确的。 – amaleemur 2014-11-11 17:53:52
并且在任何时候堆栈上的值不会超过两个:第一个ecx(稍后写入的值的数量)被压入,然后按下ecx-1(外循环应执行的次数)。 – amaleemur 2014-11-11 17:55:53
但谢谢你的反馈!我确实认为这个问题是完全解答的,因为它是在问题指定的时候运行的。汇编语言很棘手,我希望能够帮助任何未来的学生,我决定改变你指出的评论。 – amaleemur 2014-11-11 17:57:47