8085程序:升序冒泡排序


在这个程序中,我们将学习如何使用冒泡排序技术对一组字节进行升序排序。

问题陈述

编写8085汇编语言程序,对升序排列的数字进行排序,其中n个数字存储在从8041H开始的连续内存位置,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-07-30

18K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告