文章目录
- 题目简述
- 思路
- 代码
- 总结
题目简述
给定10个数,使用汇编语言,实现10个数的冒泡排序,使之成为升序
思路
本题中,我们需要使用条件转移指令,比较指令(CMP),交换指令(XCHG)。值得一提的是,CMP和XCHG的两个操作数不能同时为内存中的数据(本文章将不详细讲解原因,想知道原因的可以自己去百度哦),但可以一个是寄存器,一个是内存数据。所以,在比较和交换数据的时候,我们需要将其中一个内存数据放到寄存器中。
思路:
1.本题采用双字节存储,首先用cx记录外套循环次数,每次大循环后,次数-1,每次将cx与0比较,如果等于0,就是循环结束,直接跳出
2.用si记录内套循环中当前更换数字的下标,每次外套循环开始时就将si置为0
3.将bx加为cx 的两倍来判断内套循环结束的条件,每次都与si比较。
4…在内套循环中,将其中一个数据取到寄存器中,与内存数比较,比较完以后,将si+2,因为是采用双字节,所以每一次需要加两个地址单位。
代码
DATAS SEGMENTDATA1 DW 7,5,3,2,6,9,10,1,8,4
DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS
START:MOV AX,DATASMOV DS,AXMOV CX,9
ONE: MOV SI,0 CMP CX,0 JE EXITDEC CX MOV BX,CXADD BX,CX TWO:MOV AX,DATA1[SI] CMP AX,DATA1[SI+2] JLE THREE XCHG AX,DATA1[SI+2] XCHG AX,[SI]THREE:CMP SI,BXJE ONEADD SI,2 JMP TWO
EXIT:MOV AH,4CHINT 21H
CODES ENDSEND START
这是排序前的结果
这是排序后的结果,因为本地采用的是小端存储,所以0001 将会显示为01 00,结果正确
总结
本文仅简单介绍用汇编语言实现冒泡排序算法,有不正确的地方请指正!