基于选择的8085程序实现冒泡排序
现在让我们来看一个Intel 8085微处理器的程序。在这个程序中,我们将看到如何基于选择执行冒泡排序。
问题陈述:
编写8085汇编语言程序,对一组数据执行冒泡排序操作,并根据选择将其排列成升序或降序。
讨论:
在这个程序中,我们根据某种选择将一些数字排列成升序或降序。我们将选择存储在A000H位置。如果选择值为00H,则数据将按升序排序,否则将按降序排序。8000H存储块大小,8001H及其之后存储数据。
输入:
第一个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 06 |
8001 | 22 |
8002 | 55 |
8003 | 33 |
8004 | 66 |
8005 | 44 |
8006 | 11 |
. . . | . . . |
A000 | 00 |
. . . | . . . |
第二个输入
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 06 |
8001 | 22 |
8002 | 55 |
8003 | 33 |
8004 | 66 |
8005 | 44 |
8006 | 11 |
. . . | . . . |
A000 | 45 |
. . . | . . . |
流程图:
程序:
地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
---|---|---|---|---|
F000 | 31, 00, 90 | LXI SP,9000H | 初始化堆栈 | |
F003 | 21, 00, 80 | LXI H,8000H | 指向获取块大小 | |
F006 | 4E | MOV C,M | 获取计数 | |
F007 | 0D | DCR C | 将C减1 | |
F008 | 1E, 01 | L1 | MVI E,01H | E将存储一轮交换次数加一 |
F00A | 41 | MOV B,C | 存储比较次数 | |
F00B | 23 | INX H | 指向下一个位置 | |
F00C | 7E | L2 | MOV A,M | 将内存加载到A |
F00D | 23 | INX H | 指向下一个位置 | |
F00E | BE | CMP M | 将内存元素与A比较 | |
F00F | F5 | PUSH PSW | 将AF存储到堆栈中 | |
F010 | 3A, 00, A0 | LDA A000 | 获取选择 | |
F013 | FE, 00 | CPI 00H | 将选择与00H比较 | |
F015 | CA, 1F, F0 | JZ ASC | 如果Z = 1,则按升序排序 | |
F018 | F1 | POP PSW | 从堆栈中弹出AF | |
F019 | D2, 29, F0 | JNC SKIP | 如果CY = 0,则跳转到SKIP | |
F01C | C3, 23, F0 | JMP EXG | 否则跳转到交换 | |
F01F | F1 | ASC | POP PSW | 从堆栈中弹出AF |
F020 | DA, 29, F0 | JC SKIP | 如果CY = 1,则转到skip | |
F023 | 56 | EXG | MOV D,M | 将内存加载到D |
F024 | 77 | MOV M,A | 将A加载到内存 | |
F025 | 2B | DCX H | 指向先前位置 | |
F026 | 72 | MOV M,D | 将D加载到内存 | |
F027 | 23 | INX H | 指向下一个位置 | |
F028 | 1C | INR E | 增加交换次数 | |
F029 | 05 | SKIP | DCR B | 将B减1 |
F02A | C2, 0C, F0 | JNZ L2 | 如果Z = 0,则转到L2循环 | |
F02D | 1D | DCR E | 将E寄存器减1 | |
F02E | CA, 38, F0 | JZ DONE | 如果Z = 1,则终止程序 | |
F031 | 21, 00, 80 | LXI H,8000H | 指向块的初始地址 | |
F034 | 0D | DCR C | 减少计数 | |
F035 | C2, 08, F0 | JNZ L1 | 如果Z = 0,则转到L1 | |
F038 | 76 | DONE | HLT | 终止程序 |
输出:
第一个输出
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 06 |
8001 | 11 |
8002 | 22 |
8003 | 33 |
8004 | 44 |
8005 | 55 |
8006 | 66 |
. . . | . . . |
第二个输出
地址 | 数据 |
---|---|
. . . | . . . |
8000 | 06 |
8001 | 66 |
8002 | 55 |
8003 | 44 |
8004 | 33 |
8005 | 22 |
8006 | 11 |
. . . | . . . |
广告