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+ 浏览量

启动您的职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.