8085微处理器上实现升序冒泡排序的程序
在这里,我们将看到一个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 |
… | … |
广告