使用選擇排序的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年7月30日

2K+ 瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告