使用选择排序的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+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.