📜  8085气泡排序程序

📅  最后修改于: 2021-06-28 09:26:13             🧑  作者: Mango

先决条件–冒泡排序
问题–在8085微处理器中编写汇编语言程序,以使用冒泡排序对n个给定的数字列表进行排序。

例子 –

假设–列表大小存储在2040H,数字列表存储在2041H起。

算法 –

  1. 将列表加载到C寄存器中并将D寄存器设置为0
  2. 对于n个元素,递减C进行n-1个比较
  3. 在累加器中加载列表的起始元素
  4. 比较累加器和下一个元素
  5. 如果累加器小于或等于下一个元素,则跳至步骤8
  6. 交换两个元素
  7. 将D寄存器设置为1
  8. 减量C
  9. 如果C> 0,则取累加器中的下一个元素,然后转到点4
  10. 如果D = 0,则意味着在迭代中不进行任何交换,因此我们知道在以后的迭代中不会进行交换,因此退出了循环,并停止了程序
  11. 跳至步骤1进行进一步的迭代

程序 –

Address Label Instruction Comment
2000H START LXI H, 2040H Load size of array
2003H MVI D, 00H Clear D register to set up a flag
2005H MOV C, M Set C register with number of elements in list
2006H DCR C Decrement C
2007H INX H Increment memory to access list
2008H CHECK MOV A, M Retrieve list element in Accumulator
2009H INX H Increment memory to access next element
200AH CMP M Compare Accumulator with next element
200BH JC NEXTBYTE If accumulator is less then jump to NEXTBYTE
200EH JZ NEXTBYTE If accumulator is equal then jump to NEXTBYTE
2011H MOV B, M Swap the two elements
2012H MOV M, A
2013H DCX H
2014H MOV M, B
2015H INX H
2016H MVI D, 01H If exchange occurs save 01 in D register
2018H NEXTBYTE DCR C Decrement C for next iteration
2019H JNZ CHECK Jump to CHECK if C>0
201CH MOV A, D Transfer contents of D to Accumulator
201DH CPI 01H Compare accumulator contents with 01H
201FH JZ START Jump to START if D=01H
2022H HLT HALT

解释-

  • 检索累加器中的元素。
  • 将其与下一个元素进行比较(如果更大),然后交换,否则移至下一个索引。
  • 如果在一个完整的循环中没有交换,则暂停,否则重新开始整个迭代。
  • 以下方法有两个循环,一个循环嵌套在其他循环中,

    最坏情况和平均情况下的时间复杂度:O(n * n)。最坏的情况发生在对数组进行反向排序时。
    最佳情况下的时间复杂度:O(n)。最好的情况是对数组进行排序时。