8085 微處理器升序選擇排序程式
在這裡,我們將看到一個 8085 微處理器程式。在這個程式中,我們將瞭解如何使用選擇排序對數字序列進行排序。
問題陳述−
編寫一個 8085 組合語言程式,使用選擇排序對給定的序列進行升序排序。數字儲存在 8001H 開始的地址中。8000H 儲存塊的大小。
討論−
在選擇排序技術中,我們將從一組數字中選擇最小或最大項。在本例中,我們正在考慮升序排序,因此我們選擇最小數字。透過取最小數字,我們將其與當前指向位置的元素交換。在每次傳遞中,子塊的最小數字都放置在正確的位置。
此程式有兩個子程式。第一個子程式將檢查一組數字中的最小數字,第二個子程式將用於交換數字。
輸入
地址 | 資料 |
---|---|
… | … |
8000 | 06 |
8001 | 22 |
8002 | 55 |
8003 | 33 |
8004 | 66 |
8005 | 44 |
8006 | 11 |
… | … |
流程圖
程式
地址 | 十六進位制程式碼 | 標籤 | 助記符 | 註釋 |
---|---|---|---|---|
F000 | 31, 00, 90 | LXI SP,9000H | 初始化堆疊指標 | |
F003 | 21, 00, 80 | LXI H,8000H | 指向獲取塊大小的地址 | |
F006 | 4E | MOV C,M | 獲取計數 | |
F007 | 23 | DO | INX H | 指向下一個位置以獲取塊 |
F008 | 7E | MOV A,M | 將元素載入到 A | |
F009 | CD, 18, F0 | CALL MIN | 查詢最小值 | |
F00C | BE | CMP M | 比較 M 和 A | |
F00D | CA, 13, F0 | JZ GO | 如果 Z = 1,則它們相同,跳過交換 | |
F010 | CD, 2A, F0 | CALL SWAP | 交換最小值和當前內容 | |
F013 | 0D | GO | DCR C | 將 C 減 1 |
F014 | C2, 07, F0 | JNZ DO | 如果 Z = 0,則轉到 Do | |
F017 | 76 | HLT | 終止程式 | |
F018 | E5 | MIN | PUSH H | 將 HL 推入堆疊 |
F019 | C5 | PUSH B | 將 BC 推入堆疊 | |
F01A | 0D | DCR C | 將 C 減 1 | |
F01B | 23 | LOOP | INX H | 指向下一個位置 |
F01C | BE | CMP M | 比較記憶體資料與 A | |
F01D | DA, 23, F0 | JNC SKIP | 如果 CY = 0,則跳轉到 SKIP | |
F020 | 7E | MOV A,M | 更新 A 的值 | |
F021 | 54 | MOV D,H | 將 H 複製到 D | |
F022 | 5D | MOV E,L | 將 L 複製到 E | |
F023 | 0D | SKIP | DCR C | 將 C 減 1 |
F024 | C2, 1B, F0 | JNZ LOOP | 如果 Z = 0,則轉到 Loop | |
F027 | C1 | POP B | 從堆疊中彈出 BC | |
F028 | E1 | POP H | 從堆疊中彈出 HL | |
F029 | C9 | RET | 從子程式返回 | |
F02A | F5 | SWAP | PUSH PSW | 將 AF 儲存到堆疊中 |
F02B | C5 | PUSH B | 將 BC 推入堆疊 | |
F02C | 1A | LDAX D | A = 獲取 DE 指向的地址中的資料 | |
F02D | 47 | MOV B,A | 將 A 複製到 B | |
F02E | 7E | MOV A,M | 獲取 HL 指向的地址中的資料 | |
F02F | 12 | STAX D | 將 A 的內容儲存到 DE 指向的記憶體中 | |
F030 | 70 | MOV M,B | 將 B 的內容儲存到 HL 指向的記憶體中 | |
F031 | C1 | POP B | 從堆疊中彈出 BC | |
F032 | F1 | POP PSW | 從堆疊中彈出 AF | |
F033 | C9 | RET | 從交換返回 |
輸出
地址 | 資料 |
---|---|
… | … |
8001 | 11 |
8002 | 22 |
8003 | 33 |
8004 | 44 |
8005 | 55 |
8006 | 66 |
… | … |
廣告