8085程序实现冒泡排序


在这个程序中,我们将了解如何使用冒泡排序技术对一段字节进行排序。

问题陈述

编写8085汇编语言程序,对存储在从8041H开始的连续内存位置中的n个数字进行升序排序,其中n的值存储在内存位置8040H中(使用冒泡排序)。

讨论

在这个程序中,我们将使用冒泡排序技术对数字进行排序。这种排序技术将执行多次遍历。在每次遍历中,最大的数字都存储在列表的末尾。这里我们从8041H到8046H获取数字。数组大小存储在8040H中。

输入

地址数据
......
804006
804106
804205
804304
804401
804502
804603
......


流程图

程序

地址十六进制代码标签指令注释
800021, 40, 80STARTLXI H, 8040H 指向输入缓冲区的指针
800316, 00
MVI D, 00H D寄存器用作标志寄存器
80054E 
MOV C, M 用数据计数初始化C寄存器
80060D 
DCR C 设置C寄存器用于比较计数
800723
INX H 指向下一个位置
80087E CHECKMOV A, M 获取数字
800923
INX H 转到下一个位置
800A BE 
CMP M 将当前内存位置的内容与累加器的内容进行比较
800B DA, 14, 80
JC NEXTBYT 如果(A) < 第二个字节,则不交换
800E 46
MOV B, M 获取第二个字节以进行交换
800F 77
MOV M, A 将第一个字节存储在第二个位置
80102B 
DCX H 指向第一个位置
801170
MOV M, B 将第二个字节存储在第一个位置
801223
INX H 准备好进行下一个比较
801316, 01
MVI D, 01H 将1加载到D中作为交换的余数
80150D NEXTBYTDCR C 递减比较计数
8016C2, 08, 80
JNZ CHECK 如果比较计数不为0,则返回
80197A 
MOV A, D 获取A中的标志位
801A 0F 
RRC 将标志位D0放到进位中
801B DA, 00, 80
JC START 如果标志为1,则发生了交换
801E 76
HLT 终止程序


输出

地址数据
......
804101
804202
804303
804404
804505
804606
......

更新于: 2019年7月30日

602 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告