基于选择的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 |
| . . . | . . . |
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP