8085程序:升序冒泡排序
在这个程序中,我们将学习如何使用冒泡排序技术对一组字节进行升序排序。
问题陈述
编写8085汇编语言程序,对升序排列的数字进行排序,其中n个数字存储在从8041H开始的连续内存位置,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 |
... | ... |
广告