8085程式,用於執行升序選擇排序


現在讓我們看看 Intel 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
.
.
.
.
.
.

更新於: 2019-07-30

670 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.