8085程式:升序氣泡排序


在這個程式中,我們將學習如何使用氣泡排序技術對一組位元組進行升序排序。

問題陳述

編寫8085組合語言程式,對升序排列的數字進行排序,其中n個數字儲存在從8041H開始的連續記憶體位置,n的值儲存在記憶體位置8040H(使用氣泡排序)。

討論

在這個程式中,我們將使用氣泡排序技術對數字進行排序。這種排序技術將透過不同的趟進行執行。在每一趟中,最大的數字都儲存在列表的末尾。這裡我們從8041H到8046H讀取數字。陣列大小儲存在8040H。

輸入

地址資料
......
804006
804106
804205
804304
804401
804502
804603
......


流程圖

程式

地址十六進位制程式碼標籤助記符註釋
800021, 40, 80STARTLXI H, 8040H 指向輸入緩衝區的指標
800316, 00
MVI D, 00H D暫存器用作標誌暫存器
80054E 
MOV C, M 用資料計數初始化C暫存器
80060D 
DCR C 設定C暫存器用於比較計數
800723
INX H 指向下一個位置
80087E CHECKMOV A, M 獲取數字
800923
INX H 轉到下一個位置
800A BE 
CMP M 將當前記憶體位置的內容與累加器的內容進行比較
800B DA, 14, 80
JC NEXTBYT 如果 (A) < 第二個位元組,則不交換
800E 46
MOV B, M 獲取第二個位元組進行交換
800F 77
MOV M, A 將第一個位元組儲存在第二個位置
80102B 
DCX H 指向第一個位置
801170
MOV M, B 將第二個位元組儲存在第一個位置
801223
INX H 準備進行下一次比較
801316, 01
MVI D, 01H 將1載入到D中作為交換的餘數
80150D NEXTBYTDCR C 遞減比較計數
8016C2, 08, 80
JNZ CHECK 如果比較計數不為0,則返回
80197A 
MOV A, D 獲取A中的標誌位
801A 0F 
RRC 將標誌位D0放入進位
801B DA, 00, 80
JC START 如果標誌為1,則發生了交換
801E 76
HLT 終止程式


輸出

地址資料
......
804101
804202
804303
804404
804505
804606
......

更新於:2019-07-30

18K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告