8085 冒泡排序程序
在这个程序中,我们将了解如何使用冒泡排序技术对一组字节进行排序。
问题陈述
编写 8085 汇编语言程序,对存储在从 8041H 开始的连续内存位置中的 n 个数字进行升序排序,其中 n 的值存储在内存位置 8040H 中(使用冒泡排序)。
讨论
在这个程序中,我们将使用冒泡排序技术对数字进行排序。这种排序技术将执行多次传递。在每次传递中,最大的数字都存储在列表的末尾。这里我们从 8041H 到 8046H 获取数字。数组大小存储在 8040H 中。
输入
| 地址 | 数据 |
|---|---|
| ... | ... |
| 8040 | 06 |
| 8041 | 06 |
| 8042 | 05 |
| 8043 | 04 |
| 8044 | 01 |
| 8045 | 02 |
| 8046 | 03 |
| ... | ... |
流程图

程序
| 地址 | 十六进制代码 | 标签 | 助记符 | 注释 |
|---|---|---|---|---|
| 8000 | 21, 40, 80 | START | LXI H, 8040H | 指向输入缓冲区的指针 |
| 8003 | 16, 00 | MVI D, 00H | D 寄存器用作标志寄存器 | |
| 8005 | 4E | MOV C, M | 用数据计数初始化 C 寄存器 | |
| 8006 | 0D | DCR C | 设置 C 寄存器用于比较计数 | |
| 8007 | 23 | INX H | 指向下一个位置 | |
| 8008 | 7E | CHECK | MOV A, M | 获取数字 |
| 8009 | 23 | INX H | 转到下一个位置 | |
| 800A | BE | CMP M | 将当前内存位置的内容与累加器的内容进行比较 | |
| 800B | DA, 14, 80 | JC NEXTBYT | 如果 (A) < 第二个字节,则不交换 | |
| 800E | 46 | MOV B, M | 获取第二个字节以进行交换 | |
| 800F | 77 | MOV M, A | 将第一个字节存储在第二个位置 | |
| 8010 | 2B | DCX H | 指向第一个位置 | |
| 8011 | 70 | MOV M, B | 将第二个字节存储在第一个位置 | |
| 8012 | 23 | INX H | 准备好进行下一次比较 | |
| 8013 | 16, 01 | MVI D, 01H | 将 1 加载到 D 中作为交换的余数 | |
| 8015 | 0D | NEXTBYT | DCR C | 递减比较计数 |
| 8016 | C2, 08, 80 | JNZ CHECK | 如果比较计数不为 0,则返回 | |
| 8019 | 7A | MOV A, D | 获取 A 中的标志位 | |
| 801A | 0F | RRC | 将标志位 D0 放入进位中 | |
| 801B | DA, 00, 80 | JC START | 如果标志为 1,则发生交换 | |
| 801E | 76 | HLT | 终止程序 |
输出
| 地址 | 数据 |
|---|---|
... | ... |
| 8041 | 01 |
| 8042 | 02 |
| 8043 | 03 |
| 8044 | 04 |
| 8045 | 05 |
| 8046 | 06 |
... | ... |
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP