我發佈這個,因爲發現這個任務相當困難,並且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