计算机组成原理实验之基于x86汇编指令实现冒泡排序
PB12011047
施连杰
本程序设计中,假设最终将给出的待排序列NUM[1…n]按从小到大有序排列。此时冒泡排序的原理为,每趟比较从第一个元素开始,将相邻两元素NUM[i]与NUM[i+1]比较,若NUM[i]大于NUM[i+1],则交换两元素,于是每趟比较总能将本次序列中最大的元素NUM[im]交换到末尾。再进行下一轮比较,由于最大元素已经沉底,不必再参与比较,因此序列的末尾前移一项,此时又可将剩余元素中的最大元素沉底。不断重复单趟排序,直到序列的头尾相重合,则冒泡结束,得到了有序序列。
根据冒泡排序的原理,可以得到程序的基本设计思路,即采用两重循环来实现。第一重循环控制每趟排序,第二重循环则控制单趟排序中的每次比较。
用DI存放控制第一重循环的计数值,初始化为COUNT-1,COUNT是数组中的元素个数;每一轮循环结束,递减DI值并利用JNZ条件跳转语句判断循环是否继续。BX用于存放数组元素序号,每一轮第一重循环开始时BX初始化为0;由于数据采用DW格式,故[BX]每次递增的值应为2。
第二重循环中,每次比较时将NUM[BX]的值移入寄存器AX中,并与NUM[BX+2]的值进行比较,利用JLE条件跳转指令,若NUM[BX]>NUM[BX+2],则交换两者的值。此外,寄存器DX用以存放每趟排序的终点,初始化为2*(COUNT-1);每趟排序完成后,由于最大元