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 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告