汇编语言用“冒泡法”排序

采用“冒泡法”把一个长度已知的数组元素按从大到小排序
Array db 56h,23h,37h,78h,0ffh,0,12h,99h,64h,0b0h
Db 78h,80h,23h,1,2,0fh,2ah,46h,32h,42h

楼主写了那么多,而且格式还有差别,不知道具体是几个
下面用10个举例

DATA SEGMENT
DAT DB 20,-10,80,-5,-70,-9,125,-15,0,40
COUNT DB 10,10
DATA ENDS
;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV BL,1
LP1: CMP BL,0
JE LP4
XOR BL,BL
MOV CL,COUNT
DEC CL

push cx
LEA DI,DAT
LP2:MOV AL,[DI]
CMP AL,[DI+1]
JLE LP3
XCHG [DI+1],AL
MOV [DI],AL
MOV BL,1
LP3:INC DI
LOOP LP2
pop cx
mov count,cl
JMP LP1

LP4:MOV CL,10
LEA DI,DAT
SC:MOV AX,0
MOV BH,2
MOV AL,[DI] ;取数
CMP AL,0 ;如果是正数则跳
JGE NEXT
NEG AL ;如果是负数 先将 al中的负数取补转成对应的 正数
push ax
MOV AH,02H ;同时显示 负数的标记 '-'
MOV DL,'-' ;注意这个时候 ax 的值会因为 21h中断的调用而改变:) 所以先要保存起来
INT 21H ;就是说 int 21h 中断将会有一个返回值
pop ax ;以前我也出现过一样的问题,后来调试的时候才发现原来某些中断之后ax会改变
NEXT:XOR AH,AH
DIV COUNT+1 ;除以 10 取 十位
MOV DH,AH ;ah 是余数 al 是商
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H ;显示 十位上的数值(如果只是两位数的话)
MOV AL,DH
XOR AH,AH
; DIV COUNT+1 ;这为什么还要除以10?如果说是处理3位数的话,应该把商除10而不是把余数除10
ADD AX,3030H
MOV DL,AL ;所以最好在显示时 判断是否是 大于 100 或者 小于 100 再根据判断结果来处理 DIV
; MOV BL,AH ;AH才是所要的,故不应该再打印 AL(商)值了, 总之这里在处理 位数的显示时有点问题

;在这里,如果是2位数可以正确显示如果是3位则不能,所以最后的125显成了 <5
OUTP: MOV AH,2
INT 21H
DEC BH
JZ XT
MOV DL,BL ;显示个位数
JMP OUTP
XT: DEC CL
JZ DONE
INC DI
JMP SC
DONE: MOV AH,4CH
INT 21H
CODE ENDS
END START
温馨提示:内容为网友见解,仅供参考
第1个回答  2020-12-25

经典排序之冒泡排序

汇编语言用“冒泡法”排序
采用“冒泡法”把一个长度已知的数组元素按从大到小排序Array db 56h,23h,37h,78h,0ffh,0,12h,99h,64h,0b0hDb 78h,80h,23h,1,2,0fh,2ah,46h,32h,42h 鬼风疙瘩上 | 浏览3268 次 |举报 我有更好的答案推荐于2017-12-16 18:12:41 最佳答案 楼主写了那么多,而且格式还有差别,不知道具体是几...

使用单片机汇编语言冒泡法排序
1.了解数据排序的简单算法。2.了解数列的有序和无序概念 三、实验说明 有序的数列更有利于查找。本程序用的是“冒泡排序”法,算法是将一个数与后面的 数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在 数列的最后面。再进行下一轮比较,找出第二大数据,直到全部...

汇编语言 emu8086 软件 冒泡法程序 怎么屏幕显示输出
输出时 先取出内存数在 每个数 +30H 变成对应的ASCII码 就好了

学C语言一定要英语和数学好吗?
如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对代码的理解就不难了。如用选择法对10个不同整数排序(从小到大),选择法排序思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]...

英语三级了...
DOS中的文件、目录、路径的概念及使用是必考部分,要留意。(相关阅读:如何应付新大纲二级考试的公共基础知识) 二级考试的重中之重是程序部分。要对语言的基础知识熟练掌握,尤其要留意基础概念和基本方法(选择法、冒泡法等),要能看懂书上给的程序。一般来说,如果能独立做出大部分课后题就一切OK了。对语言的工夫应该...

想知道如果报考了计算机三级,上机部分应该如何准备
DOS中的文件、目录、路径的概念及使用是必考部分,要留意。(相关阅读:如何应付新大纲二级考试的公共基础知识) 二级考试的重中之重是程序部分。要对语言的基础知识熟练掌握,尤其要留意基础概念和基本方法(选择法、冒泡法等),要能看懂书上给的程序。一般来说,如果能独立做出大部分课后题就一切OK了。对语言的工夫...

请问,我想报考计算机三级,我要准备哪些方面的知识啊,
DOS中的文件、目录、路径的概念及使用是必考部分,要留意。(相关阅读:如何应付新大纲二级考试的公共基础知识) 二级考试的重中之重是程序部分。要对语言的基础知识熟练掌握,尤其要留意基础概念和基本方法(选择法、冒泡法等),要能看懂书上给的程序。一般来说,如果能独立做出大部分课后题就一切OK了。对语言的工夫应该...

想过计算机三级数据库,需要首先掌握哪些知识啊???
DOS中的文件、目录、路径的概念及使用是必考部分,要留意。(相关阅读:如何应付新大纲二级考试的公共基础知识) 二级考试的重中之重是程序部分。要对语言的基础知识熟练掌握,尤其要留意基础概念和基本方法(选择法、冒泡法等),要能看懂书上给的程序。一般来说,如果能独立做出大部分课后题就一切OK了。对语言的工夫应该...

怎么学好程序设计
如两个数的交换、三个数的比较、选择法排序和冒泡法排序,这就要求我们要清楚这些算法的内在含义,其中选择法排序和冒泡法排序稍难,但只要明白排序的具体过程,对代码的理解就不难了。如用选择法对10个不同整数排序(从小到大),选择法排序思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]...

请详细介绍一下大学计算机三级考试!
DOS中的文件、目录、路径的概念及使用是必考部分,要留意。(相关阅读:如何应付新大纲二级考试的公共基础知识)二级考试的重中之重是程序部分。要对语言的基础知识熟练掌握,尤其要留意基础概念和基本方法(选择法、冒泡法等),要能看懂书上给的程序。一般来说,如果能独立做出大部分课后题就一切OK了。对语言的工夫应该下...

相似回答