汇编语言:数据排序

来源:百度知道 编辑:UC知道 时间:2024/06/05 21:51:47
把4000H-400AH通过键盘输入是个不相等的数,要求从大到小排序。请高手最好是把十个数字举例好,并且用冒泡排序法,谢谢。目的:掌握循环分支程序设计的方法,掌握魔炮排序法。

; 下面的程序是16位汇编,以11个十进制数-112,56,72,98,32,-65,118,83,108,125,67(对应的十六进制数:90H,38H,48H,62H,20H,0BFH,76H,53H,6CH,7DH,43H)为例,编译通过,运行正确。

; Program Name: Bubbling.ASM

Bubbling SEGMENT
ASSUME CS:Bubbling,DS:Bubbling,ES:Bubbling
ORG 100H

Start: MOV CX,Elem_Num
Scanning: PUSH CX ;入栈保存外循环次数
LEA SI,Array ;数组首地址装入源变址寄存器
Compare: PUSH SI
POP DI ;当前数组元素地址赋给目的变址寄存器,以备交换之用
LODSB ;将当前数组元素读入累加器
CMP AL,[SI] ;当前数组元素与相邻的下一个数组元素相比较
JGE NextOne ;若小于或等于,不作数据交换,处理下一个数组元素
XCHG AL,[SI] ;若大于,交换数组元素
STOSB ;保存数值较小者
NextOne: LOOP Compare ;处理下一个数组元素
POP CX ;外循环次数出栈
LOOP Scanning ;下一趟比较

Exit_Proc:MOV AX,4C00H ;结束程序
INT 21H

ORG 4000H
Array DB -112,56,72,98,32,-65,118,83,108,125,67 ;需要排序的数据
Elem_Num EQU ($-Array)/TYPE Array-1 ;外循环次数

Bubbling ENDS
END