8085微处理器中实现降序选择排序的程序
在这里,我们将看到一个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 MAX | 查找最大值 | |
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 | MAX | 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 | D2, 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 | 66 |
8002 | 55 |
8003 | 44 |
8004 | 33 |
8005 | 22 |
8006 | 11 |
… | … |
地址 | 数据 |
---|---|
… | … |
8001 | 11 |
8002 | 22 |
8003 | 33 |
8004 | 44 |
8005 | 55 |
8006 | 66 |
… | … |
广告