汇编语言:使用冒泡排序算法将10个数按从小到大顺序排列

您所在的位置:网站首页 将表中记录按学分从小到大排序 汇编语言:使用冒泡排序算法将10个数按从小到大顺序排列

汇编语言:使用冒泡排序算法将10个数按从小到大顺序排列

2023-07-20 03:06| 来源: 网络整理| 查看: 265

汇编语言:冒泡排序算法 题目描述

自定义一组有首地址为data的10个字的数组,请利用冒泡排序算法来编写程序,使该数组中的数按照从小到大的次序有序化。(注:10个字可以自己定义。)

datas segment data1 dw 7,5,3,2,6,9,10,1,8 datas ends

冒泡排序是一种较为简单的排序算法,需要使用嵌套循环。每一个外循环会将未排序数据中的最大值排到末尾,每一个小循环会将相邻两个数比较大小,从而使较大的数下沉,较小的数上浮。 本题中,我们需要使用条件转移指令,比较指令(CMP),交换指令(XCHG)。值得一提的是,CMP和XCHG的两个操作数不能同时为内存中的数据,但可以一个是寄存器,一个是内存数据。所以,在比较和交换数据的时候,我们需要将其中一个内存数据放到寄存器中。 (代码中有注释,可直接看代码)

思路: 将循环次数放入CX(设需要排序的数据有N个,则需要执行N-1个循环,即此时应MOV CX,9)。 1.CX-1判断CX是否符合循环条件,当CX=0时,程序结束;否则,SI置零,BX置2倍的CX作为小循环的判断条件(若数据使用DB定义则无需使用BX,可直接使用CX); 2.将DATA1[SI]放入AX寄存器中,并与DATA1[SI+2]作比较(由于本体数据定义时DW,所以用+2,若使用DB定义数据则应+1),若小于等于,则执行第3步;否则交换DATA1[SI]和DATA1[SI+2]; 3.比较SI和BX,相等时执行第1步,否则,SI+2,跳转到第二步。 以上就是一个较为简单的冒泡排序法步骤,接下来看代码:

DATAS SEGMENT DATA1 DW 7,5,3,2,6,9,10,1,8 DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV CX,9 L1: ;最外层循环 MOV SI,0 ;设置SI为零 CMP CX,0 ;判断循环是否结束 JE EXIT DEC CX ;cx-1 MOV BX,CX ADD BX,CX ;将bx置为cx的2倍,用来判断SI结束时的大小 ;若数据以字节定义,则只需要将bx置为cx即可 L2: MOV AX,DATA1[SI] ;不能直接比较内存中的数字,所以我们需要将其中一个数字放到寄存器AX中 CMP AX,DATA1[SI+2] ;比较两个数 JLE L3 ;小于等于的话,则直接跳到下一对数据的比较 XCHG AX,DATA1[SI+2] ;若大于,则通过两个XCHG语句,交换两内存中的数字 XCHG AX,[SI] ;内层循环结束时跳到外层循环 L3: CMP SI,BX JE L1 ADD SI,2 ;si+2,开始下一对数的比较 JMP L2 EXIT: MOV AH,4CH INT 21H CODES ENDS END START 排序结果

冒泡排序前运行前内存数据内容: 在这里插入图片描述

冒泡排序后: 在这里插入图片描述

冒泡排序运行正确,此题目完成!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3