8085二進位制搜尋程式


這裡我們將瞭解如何在8085中執行二進位制搜尋。

問題陳述:

編寫8085組合語言程式,對儲存在F110到F119位置的一組資料執行二進位制搜尋。金鑰位於F100。

討論

要執行二進位制搜尋,陣列必須已排序。我們將下限放入L,上限放入H。陣列位置儲存在DE暫存器對中。中間值使用(H + L)/2計算。要執行此除法,我們只需將其右移一次。然後將中間值放入D並檢查使用DE定位的項。如果數字相同,則跳轉到結束並將1儲存在F101。這表示找到該項,並將中間值儲存為索引。如果中間值不匹配,則有兩種情況,如果數字小於中間元素,則它位於下半部分,因此上限將為中間值-1,在另一種情況下,它將位於另一側,因此下限將為中間值+1。如果未找到該項,它將在F101位置儲存02。

輸入

地址
資料
F100
48


F110
04
F111
08
F112
22
F113
2B
F114
31
F115
38
F116
48
F117
51
F118
54
F119
62


 

地址
資料
F100
9D


F110
04
F111
08
F112
22
F113
2B
F114
31
F115
38
F116
48
F117
51
F118
54
F119
62


 

流程圖

 

程式

地址
十六進位制程式碼
標籤
助記符
註釋
F000
3A, 00, F1
 
LDA F100
將金鑰載入到A中
F003
47

 
MOV B,A

將金鑰儲存到B中
F004
AF
 
XRA A
清除累加器
F005
32, 03, F1

 
STA F103

將迭代次數儲存到F103H中
F008
6F
 
MOV L,A
也將A儲存到L中
F009
26, 09

 
MVI H,09

將9載入到H中
F00B
3A, 03, F1
START
LDA F103
將迭代次數載入到A中
F00E
3C

 
INR A

增加A
F00F
32, 03, F1
 
STA F103
恢復迭代次數
F012
7C

 
MOV A,H

將上限從H取到A
F013
BD
 
CMP L
比較A和L
F014
DA, 46, F0

 
JC L2

如果CY = 1,則跳轉到L2
F017
85
 
ADD L
否則將L與A相加
F018
1F

 
RAR

右移以獲取其一半
F019
4F
 
MOV C,A
將中間值儲存到C中
F01A
D2, 1E, F0

 
JNC RESET

如果CY = 0,則跳轉到Reset
F01D
3F
 
CMC
對進位取反
F01E
11, 10, F1

RESET
LXI D,F110

將陣列的初始地址載入到DE中
F021
83
 
ADD E
將E和Mid相加
F022
5F

 
MOV E,A

將索引儲存到E中
F023
AF
 
XRA A
清除A
F024
8A

 
ADC D

將D與A和進位相加
F025
57
 
MOV D,A
將A恢復到D
F026
1A

 
LDAX D

將A載入中間位置的值
F027
B8
 
CMP B
與金鑰比較
F028
DA, 34, F0

 
JC ELSE

如果CY = 1,則跳轉到ELSE
F02B
CA, 3A, F0
 
JZ PRINT
如果它們相同,則跳轉到PRINT
F02E
79

 
MOV A,C

將中間值從C取到A
F02F
3D
 
DCR A
減少A以獲取中間值-1
F030
67

 
MOV H,A

使用中間值-1更新上限
F031
C3, 0B, F0
 
JMP START
再次跳轉到START
F034
79

ELSE
MOV A,C

將中間值從C載入到A
F035
3C
 
INR A
增加A以獲取中間值+1
F036
7D

 
MOV A,L

使用中間值+1更新下限
F037
C3, 0B, F0
 
JMP START
再次跳轉到START
F03A
3E, 01

PRINT
MVI A,01

載入1,因為找到該項
F03C
32, 01, F1
 
STA F101
將結果儲存在F101中
F03F
79

 
MOV A,C

將中間值從C取到A
F040
32, 02, F1
 
STA F102
將金鑰的索引儲存到F102中
F043
C3, 4B, F0

 
JMP END

結束任務
F046
3E, 02
L2
MVI A,02
將2載入到A中,表示金鑰不存在
F048
32, 01, F1

 
STA F101

將結果儲存在F102中
F04B
76
END
HLT
終止程式

 

輸出

地址
資料
F101
01
F102
06

 

地址
資料
F101
02

更新於: 2019年7月30日

1K+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告