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 |
. . . | . . . |
广告