8085 氣泡排序程式
在這個程式中,我們將瞭解如何使用氣泡排序技術對一組位元組進行排序。
問題陳述
編寫 8085 組合語言程式,對儲存在從 8041H 開始的連續記憶體位置中的 n 個數字進行升序排序,其中 n 的值儲存在記憶體位置 8040H 中(使用氣泡排序)。
討論
在這個程式中,我們將使用氣泡排序技術對數字進行排序。這種排序技術將執行多次傳遞。在每次傳遞中,最大的數字都儲存在列表的末尾。這裡我們從 8041H 到 8046H 獲取數字。陣列大小儲存在 8040H 中。
輸入
地址 | 資料 |
---|---|
... | ... |
8040 | 06 |
8041 | 06 |
8042 | 05 |
8043 | 04 |
8044 | 01 |
8045 | 02 |
8046 | 03 |
... | ... |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
8000 | 21, 40, 80 | START | LXI H, 8040H | 指向輸入緩衝區的指標 |
8003 | 16, 00 | MVI D, 00H | D 暫存器用作標誌暫存器 | |
8005 | 4E | MOV C, M | 用資料計數初始化 C 暫存器 | |
8006 | 0D | DCR C | 設定 C 暫存器用於比較計數 | |
8007 | 23 | INX H | 指向下一個位置 | |
8008 | 7E | CHECK | MOV A, M | 獲取數字 |
8009 | 23 | INX H | 轉到下一個位置 | |
800A | BE | CMP M | 將當前記憶體位置的內容與累加器的內容進行比較 | |
800B | DA, 14, 80 | JC NEXTBYT | 如果 (A) < 第二個位元組,則不交換 | |
800E | 46 | MOV B, M | 獲取第二個位元組以進行交換 | |
800F | 77 | MOV M, A | 將第一個位元組儲存在第二個位置 | |
8010 | 2B | DCX H | 指向第一個位置 | |
8011 | 70 | MOV M, B | 將第二個位元組儲存在第一個位置 | |
8012 | 23 | INX H | 準備好進行下一次比較 | |
8013 | 16, 01 | MVI D, 01H | 將 1 載入到 D 中作為交換的餘數 | |
8015 | 0D | NEXTBYT | DCR C | 遞減比較計數 |
8016 | C2, 08, 80 | JNZ CHECK | 如果比較計數不為 0,則返回 | |
8019 | 7A | MOV A, D | 獲取 A 中的標誌位 | |
801A | 0F | RRC | 將標誌位 D0 放入進位中 | |
801B | DA, 00, 80 | JC START | 如果標誌為 1,則發生交換 | |
801E | 76 | HLT | 終止程式 |
輸出
地址 | 資料 |
---|---|
... | ... |
8041 | 01 |
8042 | 02 |
8043 | 03 |
8044 | 04 |
8045 | 05 |
8046 | 06 |
... | ... |
廣告